Skip to content

Commit 9c13f1f

Browse files
authoredMar 9, 2024
fix(query): type return of useMutation query (#1215)
* fix(query): type return of useMutation query * fix(query): update samples * fix(query): add return type for vue query * fix(query): add return type for svelte query * fix(query): update samples for vue and svelte query
1 parent b63ffe6 commit 9c13f1f

File tree

11 files changed

+156
-38
lines changed

11 files changed

+156
-38
lines changed
 

‎packages/query/src/index.ts

+63-17
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ const SVELTE_QUERY_DEPENDENCIES_V3: GeneratorDependency[] = [
9292
{ name: 'UseQueryStoreResult' },
9393
{ name: 'UseInfiniteQueryStoreResult' },
9494
{ name: 'QueryKey' },
95+
{ name: 'CreateMutationResult' },
9596
],
9697
dependency: '@sveltestack/svelte-query',
9798
},
@@ -113,6 +114,7 @@ const SVELTE_QUERY_DEPENDENCIES: GeneratorDependency[] = [
113114
{ name: 'CreateInfiniteQueryResult' },
114115
{ name: 'QueryKey' },
115116
{ name: 'InfiniteData' },
117+
{ name: 'CreateMutationResult' },
116118
],
117119
dependency: '@tanstack/svelte-query',
118120
},
@@ -160,6 +162,7 @@ const REACT_QUERY_DEPENDENCIES_V3: GeneratorDependency[] = [
160162
{ name: 'UseInfiniteQueryResult' },
161163
{ name: 'QueryKey' },
162164
{ name: 'QueryClient' },
165+
{ name: 'UseMutationResult' },
163166
],
164167
dependency: 'react-query',
165168
},
@@ -186,6 +189,7 @@ const REACT_QUERY_DEPENDENCIES: GeneratorDependency[] = [
186189
{ name: 'QueryKey' },
187190
{ name: 'QueryClient' },
188191
{ name: 'InfiniteData' },
192+
{ name: 'UseMutationResult' },
189193
],
190194
dependency: '@tanstack/react-query',
191195
},
@@ -231,6 +235,7 @@ const VUE_QUERY_DEPENDENCIES_V3: GeneratorDependency[] = [
231235
{ name: 'UseQueryResult' },
232236
{ name: 'UseInfiniteQueryResult' },
233237
{ name: 'QueryKey' },
238+
{ name: 'UseMutationReturnType' },
234239
],
235240
dependency: 'vue-query/types',
236241
},
@@ -262,6 +267,7 @@ const VUE_QUERY_DEPENDENCIES: GeneratorDependency[] = [
262267
{ name: 'UseQueryReturnType' },
263268
{ name: 'UseInfiniteQueryReturnType' },
264269
{ name: 'InfiniteData' },
270+
{ name: 'UseMutationReturnType' },
265271
],
266272
dependency: '@tanstack/vue-query',
267273
},
@@ -728,6 +734,42 @@ const generateQueryReturnType = ({
728734
}
729735
};
730736

737+
const generateMutatorReturnType = ({
738+
outputClient,
739+
dataType,
740+
variableType,
741+
}: {
742+
outputClient: OutputClient | OutputClientFunc;
743+
dataType: unknown;
744+
variableType: unknown;
745+
}) => {
746+
if (outputClient === OutputClient.REACT_QUERY) {
747+
return `: UseMutationResult<
748+
Awaited<ReturnType<${dataType}>>,
749+
TError,
750+
${variableType},
751+
TContext
752+
>`;
753+
}
754+
if (outputClient === OutputClient.SVELTE_QUERY) {
755+
return `: CreateMutationResult<
756+
Awaited<ReturnType<${dataType}>>,
757+
TError,
758+
${variableType},
759+
TContext
760+
>`;
761+
}
762+
if (outputClient === OutputClient.VUE_QUERY) {
763+
return `: UseMutationReturnType<
764+
Awaited<ReturnType<${dataType}>>,
765+
TError,
766+
${variableType},
767+
TContext
768+
>`;
769+
}
770+
return '';
771+
};
772+
731773
const getQueryOptions = ({
732774
isRequestOptions,
733775
mutator,
@@ -1382,17 +1424,17 @@ const generateQueryHook = async (
13821424

13831425
const mutationOptionsFn = `export const ${mutationOptionsFnName} = <TError = ${errorType},
13841426
TContext = unknown>(${mutationArguments}): ${mutationOptionFnReturnType} => {
1385-
${
1386-
isRequestOptions
1387-
? `const {mutation: mutationOptions${
1388-
!mutator
1389-
? `, axios: axiosOptions`
1390-
: mutator?.hasSecondArg
1391-
? ', request: requestOptions'
1392-
: ''
1393-
}} = options ?? {};`
1394-
: ''
1395-
}
1427+
${
1428+
isRequestOptions
1429+
? `const {mutation: mutationOptions${
1430+
!mutator
1431+
? `, axios: axiosOptions`
1432+
: mutator?.hasSecondArg
1433+
? ', request: requestOptions'
1434+
: ''
1435+
}} = options ?? {};`
1436+
: ''
1437+
}
13961438
13971439
${
13981440
mutator?.isHook
@@ -1430,11 +1472,11 @@ const generateQueryHook = async (
14301472
}
14311473
14321474
1433-
return ${
1434-
!mutationOptionsMutator
1435-
? '{ mutationFn, ...mutationOptions }'
1436-
: 'customOptions'
1437-
}}`;
1475+
return ${
1476+
!mutationOptionsMutator
1477+
? '{ mutationFn, ...mutationOptions }'
1478+
: 'customOptions'
1479+
}}`;
14381480

14391481
const operationPrefix = hasSvelteQueryV4 ? 'create' : 'use';
14401482

@@ -1458,7 +1500,11 @@ ${mutationOptionsFn}
14581500
${doc}export const ${camel(
14591501
`${operationPrefix}-${operationName}`,
14601502
)} = <TError = ${errorType},
1461-
TContext = unknown>(${mutationArguments}) => {
1503+
TContext = unknown>(${mutationArguments})${generateMutatorReturnType({
1504+
outputClient,
1505+
dataType,
1506+
variableType: definitions ? `{${definitions}}` : 'void',
1507+
})} => {
14621508
14631509
const ${mutationOptionsVarName} = ${mutationOptionsFnName}(${
14641510
isRequestOptions ? 'options' : 'mutationOptions'

‎samples/react-app-with-swr/src/api/endpoints/petstoreFromFileSpecWithTransformer.ts

+2-6
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,7 @@ export const useListPets = <TError = Error>(
6464
const query = useSwr<Awaited<ReturnType<typeof swrFn>>, TError>(
6565
swrKey,
6666
swrFn,
67-
{
68-
...swrOptions,
69-
},
67+
swrOptions,
7068
);
7169

7270
return {
@@ -173,9 +171,7 @@ export const useShowPetById = <TError = Error>(
173171
const query = useSwr<Awaited<ReturnType<typeof swrFn>>, TError>(
174172
swrKey,
175173
swrFn,
176-
{
177-
...swrOptions,
178-
},
174+
swrOptions,
179175
);
180176

181177
return {

‎samples/react-query/basic/src/api/endpoints/petstoreFromFileSpecWithTransformer.ts

+13-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import type {
1919
UseInfiniteQueryOptions,
2020
UseInfiniteQueryResult,
2121
UseMutationOptions,
22+
UseMutationResult,
2223
UseQueryOptions,
2324
UseQueryResult,
2425
UseSuspenseInfiniteQueryOptions,
@@ -476,7 +477,12 @@ export const useCreatePets = <
476477
{ data: CreatePetsBody; version?: number },
477478
TContext
478479
>;
479-
}) => {
480+
}): UseMutationResult<
481+
Awaited<ReturnType<typeof createPets>>,
482+
TError,
483+
{ data: CreatePetsBody; version?: number },
484+
TContext
485+
> => {
480486
const mutationOptions = getCreatePetsMutationOptions(options);
481487

482488
return useMutation(mutationOptions);
@@ -543,7 +549,12 @@ export const useUpdatePets = <
543549
{ data: NonReadonly<Pet>; version?: number },
544550
TContext
545551
>;
546-
}) => {
552+
}): UseMutationResult<
553+
Awaited<ReturnType<typeof updatePets>>,
554+
TError,
555+
{ data: NonReadonly<Pet>; version?: number },
556+
TContext
557+
> => {
547558
const mutationOptions = getUpdatePetsMutationOptions(options);
548559

549560
return useMutation(mutationOptions);

‎samples/react-query/custom-client/src/api/endpoints/petstoreFromFileSpecWithTransformer.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import type {
1010
QueryFunction,
1111
QueryKey,
1212
UseMutationOptions,
13+
UseMutationResult,
1314
UseQueryOptions,
1415
UseQueryResult,
1516
} from 'react-query';
@@ -191,7 +192,12 @@ export const useCreatePets = <
191192
{ data: BodyType<CreatePetsBody>; version?: number },
192193
TContext
193194
>;
194-
}) => {
195+
}): UseMutationResult<
196+
Awaited<ReturnType<ReturnType<typeof useCreatePetsHook>>>,
197+
TError,
198+
{ data: BodyType<CreatePetsBody>; version?: number },
199+
TContext
200+
> => {
195201
const mutationOptions = useCreatePetsMutationOptions(options);
196202

197203
return useMutation(mutationOptions);

‎samples/react-query/form-data-mutator/endpoints.ts

+11-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
* OpenAPI spec version: 1.0.0
66
*/
77
import { useMutation } from 'react-query';
8-
import type { MutationFunction, UseMutationOptions } from 'react-query';
8+
import type {
9+
MutationFunction,
10+
UseMutationOptions,
11+
UseMutationResult,
12+
} from 'react-query';
913
import type { CreatePetsBody, Error, Pet } from './models';
1014
import { customInstance } from './custom-instance';
1115
import { customFormData } from './custom-form-data';
@@ -73,7 +77,12 @@ export const useCreatePets = <TError = Error, TContext = unknown>(options?: {
7377
{ data: CreatePetsBody },
7478
TContext
7579
>;
76-
}) => {
80+
}): UseMutationResult<
81+
Awaited<ReturnType<typeof createPets>>,
82+
TError,
83+
{ data: CreatePetsBody },
84+
TContext
85+
> => {
7786
const mutationOptions = getCreatePetsMutationOptions(options);
7887

7988
return useMutation(mutationOptions);

‎samples/react-query/form-data/endpoints.ts

+11-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
* OpenAPI spec version: 1.0.0
66
*/
77
import { useMutation } from 'react-query';
8-
import type { MutationFunction, UseMutationOptions } from 'react-query';
8+
import type {
9+
MutationFunction,
10+
UseMutationOptions,
11+
UseMutationResult,
12+
} from 'react-query';
913
import type { CreatePetsBody, Error, Pet } from './models';
1014
import { customInstance } from './custom-instance';
1115

@@ -75,7 +79,12 @@ export const useCreatePets = <TError = Error, TContext = unknown>(options?: {
7579
{ data: CreatePetsBody },
7680
TContext
7781
>;
78-
}) => {
82+
}): UseMutationResult<
83+
Awaited<ReturnType<typeof createPets>>,
84+
TError,
85+
{ data: CreatePetsBody },
86+
TContext
87+
> => {
7988
const mutationOptions = getCreatePetsMutationOptions(options);
8089

8190
return useMutation(mutationOptions);

‎samples/react-query/form-url-encoded-mutator/endpoints.ts

+11-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
* OpenAPI spec version: 1.0.0
66
*/
77
import { useMutation } from 'react-query';
8-
import type { MutationFunction, UseMutationOptions } from 'react-query';
8+
import type {
9+
MutationFunction,
10+
UseMutationOptions,
11+
UseMutationResult,
12+
} from 'react-query';
913
import type { CreatePetsBody, Error, Pet } from './models';
1014
import { customInstance } from './custom-instance';
1115
import { customFormUrlEncoded } from './custom-form-url-encoded';
@@ -73,7 +77,12 @@ export const useCreatePets = <TError = Error, TContext = unknown>(options?: {
7377
{ data: CreatePetsBody },
7478
TContext
7579
>;
76-
}) => {
80+
}): UseMutationResult<
81+
Awaited<ReturnType<typeof createPets>>,
82+
TError,
83+
{ data: CreatePetsBody },
84+
TContext
85+
> => {
7786
const mutationOptions = getCreatePetsMutationOptions(options);
7887

7988
return useMutation(mutationOptions);

‎samples/react-query/form-url-encoded/endpoints.ts

+11-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
* OpenAPI spec version: 1.0.0
66
*/
77
import { useMutation } from 'react-query';
8-
import type { MutationFunction, UseMutationOptions } from 'react-query';
8+
import type {
9+
MutationFunction,
10+
UseMutationOptions,
11+
UseMutationResult,
12+
} from 'react-query';
913
import type { CreatePetsBody, Error, Pet } from './models';
1014
import { customInstance } from './custom-instance';
1115

@@ -75,7 +79,12 @@ export const useCreatePets = <TError = Error, TContext = unknown>(options?: {
7579
{ data: CreatePetsBody },
7680
TContext
7781
>;
78-
}) => {
82+
}): UseMutationResult<
83+
Awaited<ReturnType<typeof createPets>>,
84+
TError,
85+
{ data: CreatePetsBody },
86+
TContext
87+
> => {
7988
const mutationOptions = getCreatePetsMutationOptions(options);
8089

8190
return useMutation(mutationOptions);

‎samples/react-query/hook-mutator/endpoints.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import type {
1010
QueryFunction,
1111
QueryKey,
1212
UseMutationOptions,
13+
UseMutationResult,
1314
UseQueryOptions,
1415
UseQueryResult,
1516
} from 'react-query';
@@ -167,7 +168,12 @@ export const useCreatePets = <TError = Error, TContext = unknown>(options?: {
167168
{ data: CreatePetsBody },
168169
TContext
169170
>;
170-
}) => {
171+
}): UseMutationResult<
172+
Awaited<ReturnType<ReturnType<typeof useCreatePetsHook>>>,
173+
TError,
174+
{ data: CreatePetsBody },
175+
TContext
176+
> => {
171177
const mutationOptions = useCreatePetsMutationOptions(options);
172178

173179
return useMutation(mutationOptions);

‎samples/svelte-query/src/api/endpoints/petstoreFromFileSpecWithTransformer.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import { createMutation, createQuery } from '@tanstack/svelte-query';
88
import type {
99
CreateMutationOptions,
10+
CreateMutationResult,
1011
CreateQueryOptions,
1112
CreateQueryResult,
1213
MutationFunction,
@@ -175,7 +176,12 @@ export const createCreatePets = <TError = Error, TContext = unknown>(options?: {
175176
{ data: CreatePetsBody; version?: number },
176177
TContext
177178
>;
178-
}) => {
179+
}): CreateMutationResult<
180+
Awaited<ReturnType<typeof createPets>>,
181+
TError,
182+
{ data: CreatePetsBody; version?: number },
183+
TContext
184+
> => {
179185
const mutationOptions = getCreatePetsMutationOptions(options);
180186

181187
return createMutation(mutationOptions);

‎samples/vue-query/src/api/endpoints/petstoreFromFileSpecWithTransformer.ts

+13-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import type {
1212
UseInfiniteQueryOptions,
1313
UseInfiniteQueryReturnType,
1414
UseMutationOptions,
15+
UseMutationReturnType,
1516
UseQueryOptions,
1617
UseQueryReturnType,
1718
} from '@tanstack/vue-query';
@@ -257,7 +258,12 @@ export const useCreatePets = <TError = Error, TContext = unknown>(options?: {
257258
{ data: CreatePetsBody; version?: number },
258259
TContext
259260
>;
260-
}) => {
261+
}): UseMutationReturnType<
262+
Awaited<ReturnType<typeof createPets>>,
263+
TError,
264+
{ data: CreatePetsBody; version?: number },
265+
TContext
266+
> => {
261267
const mutationOptions = getCreatePetsMutationOptions(options);
262268

263269
return useMutation(mutationOptions);
@@ -479,7 +485,12 @@ export const usePostApiV1UserLogout = <
479485
void,
480486
TContext
481487
>;
482-
}) => {
488+
}): UseMutationReturnType<
489+
Awaited<ReturnType<typeof postApiV1UserLogout>>,
490+
TError,
491+
void,
492+
TContext
493+
> => {
483494
const mutationOptions = getPostApiV1UserLogoutMutationOptions(options);
484495

485496
return useMutation(mutationOptions);

0 commit comments

Comments
 (0)
Please sign in to comment.