Skip to content

Commit b26ce92

Browse files
committedFeb 19, 2023
feat(query): add support of tanstack svelte query
1 parent 903e0b5 commit b26ce92

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+3970
-1445
lines changed
 

‎packages/query/src/index.ts

+93-27
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,51 @@ const SVELTE_QUERY_DEPENDENCIES: GeneratorDependency[] = [
7070
dependency: '@sveltestack/svelte-query',
7171
},
7272
];
73+
const SVELTE_QUERY_V4_DEPENDENCIES: GeneratorDependency[] = [
74+
{
75+
exports: [
76+
{ name: 'createQuery', values: true },
77+
{ name: 'createInfiniteQuery', values: true },
78+
{ name: 'createMutation', values: true },
79+
{ name: 'CreateQueryOptions' },
80+
{
81+
name: 'CreateInfiniteQueryOptions',
82+
},
83+
{ name: 'CreateMutationOptions' },
84+
{ name: 'QueryFunction' },
85+
{ name: 'MutationFunction' },
86+
{ name: 'CreateQueryResult' },
87+
{ name: 'CreateInfiniteQueryResult' },
88+
{ name: 'QueryKey' },
89+
],
90+
dependency: '@tanstack/svelte-query',
91+
},
92+
];
93+
94+
const isSvelteQueryV3 = (packageJson: PackageJson | undefined) => {
95+
const hasVueQuery =
96+
packageJson?.dependencies?.['@sveltestack/svelte-query'] ??
97+
packageJson?.devDependencies?.['@sveltestack/svelte-query'];
98+
const hasVueQueryV4 =
99+
packageJson?.dependencies?.['@tanstack/svelte-query'] ??
100+
packageJson?.devDependencies?.['@tanstack/svelte-query'];
101+
102+
return !!hasVueQuery && !hasVueQueryV4;
103+
};
73104

74105
export const getSvelteQueryDependencies: ClientDependenciesBuilder = (
75-
hasGlobalMutator: boolean,
76-
) => [
77-
...(!hasGlobalMutator ? AXIOS_DEPENDENCIES : []),
78-
...SVELTE_QUERY_DEPENDENCIES,
79-
];
106+
hasGlobalMutator,
107+
packageJson,
108+
) => {
109+
const hasSvelteQueryV3 = isSvelteQueryV3(packageJson);
110+
111+
return [
112+
...(!hasGlobalMutator ? AXIOS_DEPENDENCIES : []),
113+
...(hasSvelteQueryV3
114+
? SVELTE_QUERY_DEPENDENCIES
115+
: SVELTE_QUERY_V4_DEPENDENCIES),
116+
];
117+
};
80118

81119
const REACT_QUERY_DEPENDENCIES: GeneratorDependency[] = [
82120
{
@@ -425,21 +463,24 @@ const generateQueryArguments = ({
425463
mutator,
426464
isRequestOptions,
427465
type,
466+
hasSvelteQueryV4,
428467
}: {
429468
operationName: string;
430469
definitions: string;
431470
mutator?: GeneratorMutator;
432471
isRequestOptions: boolean;
433472
type?: QueryType;
473+
hasSvelteQueryV4: boolean;
434474
}) => {
435475
const isMutatorHook = mutator?.isHook;
476+
const prefix = !hasSvelteQueryV4 ? 'Use' : 'Create';
436477
const definition = type
437-
? `Use${pascal(type)}Options<Awaited<ReturnType<${
478+
? `${prefix}${pascal(type)}Options<Awaited<ReturnType<${
438479
isMutatorHook
439480
? `ReturnType<typeof use${pascal(operationName)}Hook>`
440481
: `typeof ${operationName}`
441482
}>>, TError, TData>`
442-
: `UseMutationOptions<Awaited<ReturnType<${
483+
: `${prefix}MutationOptions<Awaited<ReturnType<${
443484
isMutatorHook
444485
? `ReturnType<typeof use${pascal(operationName)}Hook>`
445486
: `typeof ${operationName}`
@@ -463,24 +504,32 @@ const generateQueryReturnType = ({
463504
type,
464505
isMutatorHook,
465506
operationName,
466-
packageJson,
507+
hasVueQueryV4,
508+
hasSvelteQueryV4,
467509
}: {
468510
outputClient: OutputClient | OutputClientFunc;
469511
type: QueryType;
470512
isMutatorHook?: boolean;
471513
operationName: string;
472-
packageJson?: PackageJson;
514+
hasVueQueryV4: boolean;
515+
hasSvelteQueryV4: boolean;
473516
}) => {
474517
switch (outputClient) {
475-
case OutputClient.SVELTE_QUERY:
476-
return `Use${pascal(type)}StoreResult<Awaited<ReturnType<${
477-
isMutatorHook
478-
? `ReturnType<typeof use${pascal(operationName)}Hook>`
479-
: `typeof ${operationName}`
480-
}>>, TError, TData, QueryKey> & { queryKey: QueryKey }`;
518+
case OutputClient.SVELTE_QUERY: {
519+
if (!hasSvelteQueryV4) {
520+
return `Use${pascal(type)}StoreResult<Awaited<ReturnType<${
521+
isMutatorHook
522+
? `ReturnType<typeof use${pascal(operationName)}Hook>`
523+
: `typeof ${operationName}`
524+
}>>, TError, TData, QueryKey> & { queryKey: QueryKey }`;
525+
}
526+
527+
return `Create${pascal(
528+
type,
529+
)}Result<TData, TError> & { queryKey: QueryKey }`;
530+
}
481531
case OutputClient.VUE_QUERY: {
482-
const hasVueQueryV3 = isVueQueryV3(packageJson);
483-
if (hasVueQueryV3) {
532+
if (!hasVueQueryV4) {
484533
return ` UseQueryReturnType<TData, TError, Use${pascal(
485534
type,
486535
)}Result<TData, TError>> & { queryKey: QueryKey }`;
@@ -600,7 +649,8 @@ const generateQueryImplementation = ({
600649
isExactOptionalPropertyTypes,
601650
hasSignal,
602651
route,
603-
packageJson,
652+
hasVueQueryV4,
653+
hasSvelteQueryV4,
604654
}: {
605655
queryOption: {
606656
name: string;
@@ -623,7 +673,8 @@ const generateQueryImplementation = ({
623673
isExactOptionalPropertyTypes: boolean;
624674
hasSignal: boolean;
625675
route: string;
626-
packageJson?: PackageJson;
676+
hasVueQueryV4: boolean;
677+
hasSvelteQueryV4: boolean;
627678
}) => {
628679
const queryProps = toObjectString(props, 'implementation');
629680
const httpFunctionProps = queryParam
@@ -634,14 +685,13 @@ const generateQueryImplementation = ({
634685
.join(',')
635686
: queryProperties;
636687

637-
const hasVueQueryV4 =
638-
OutputClient.VUE_QUERY === outputClient && !isVueQueryV3(packageJson);
639688
const returnType = generateQueryReturnType({
640689
outputClient,
641690
type,
642691
isMutatorHook: mutator?.isHook,
643692
operationName,
644-
packageJson,
693+
hasVueQueryV4,
694+
hasSvelteQueryV4,
645695
});
646696

647697
let errorType = `AxiosError<${response.definition.errors || 'unknown'}>`;
@@ -664,6 +714,7 @@ const generateQueryImplementation = ({
664714
mutator,
665715
isRequestOptions,
666716
type,
717+
hasSvelteQueryV4,
667718
});
668719

669720
const queryOptions = getQueryOptions({
@@ -684,14 +735,16 @@ const generateQueryImplementation = ({
684735
hasSignal,
685736
});
686737

738+
const operationPrefix = hasSvelteQueryV4 ? 'create' : 'use';
739+
687740
return `
688741
export type ${pascal(
689742
name,
690743
)}QueryResult = NonNullable<Awaited<ReturnType<${dataType}>>>
691744
export type ${pascal(name)}QueryError = ${errorType}
692745
693746
export const ${camel(
694-
`use-${name}`,
747+
`${operationPrefix}-${name}`,
695748
)} = <TData = Awaited<ReturnType<${dataType}>>, TError = ${errorType}>(\n ${queryProps} ${queryArguments}\n ): ${returnType} => {
696749
697750
${hookOptions}
@@ -734,7 +787,7 @@ export const ${camel(
734787
: ''
735788
}
736789
737-
const query = ${camel(`use-${type}`)}<Awaited<ReturnType<${
790+
const query = ${camel(`${operationPrefix}-${type}`)}<Awaited<ReturnType<${
738791
mutator?.isHook
739792
? `ReturnType<typeof use${pascal(operationName)}Hook>`
740793
: `typeof ${operationName}`
@@ -778,6 +831,13 @@ const generateQueryHook = async (
778831
const isExactOptionalPropertyTypes =
779832
!!context.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;
780833

834+
const hasVueQueryV4 =
835+
OutputClient.VUE_QUERY === outputClient &&
836+
!isVueQueryV3(context.packageJson);
837+
const hasSvelteQueryV4 =
838+
OutputClient.SVELTE_QUERY === outputClient &&
839+
!isSvelteQueryV3(context.packageJson);
840+
781841
if (
782842
verb === Verbs.GET ||
783843
operationQueryOptions?.useInfinite ||
@@ -870,7 +930,8 @@ const generateQueryHook = async (
870930
queryOptionsMutator,
871931
queryKeyMutator,
872932
route,
873-
packageJson: context.packageJson,
933+
hasVueQueryV4,
934+
hasSvelteQueryV4,
874935
}),
875936
'',
876937
)}
@@ -926,6 +987,8 @@ const generateQueryHook = async (
926987
? `ReturnType<typeof use${pascal(operationName)}Hook>`
927988
: `typeof ${operationName}`;
928989

990+
const operationPrefix = hasSvelteQueryV4 ? 'create' : 'use';
991+
929992
const implementation = `
930993
export type ${pascal(
931994
operationName,
@@ -941,13 +1004,16 @@ const generateQueryHook = async (
9411004
}
9421005
export type ${pascal(operationName)}MutationError = ${errorType}
9431006
944-
export const ${camel(`use-${operationName}`)} = <TError = ${errorType},
1007+
export const ${camel(
1008+
`${operationPrefix}-${operationName}`,
1009+
)} = <TError = ${errorType},
9451010
${!definitions ? `TVariables = void,` : ''}
9461011
TContext = unknown>(${generateQueryArguments({
9471012
operationName,
9481013
definitions,
9491014
mutator,
9501015
isRequestOptions,
1016+
hasSvelteQueryV4,
9511017
})}) => {
9521018
${
9531019
isRequestOptions
@@ -996,7 +1062,7 @@ const generateQueryHook = async (
9961062
: ''
9971063
}
9981064
999-
return useMutation<Awaited<ReturnType<typeof ${operationName}>>, TError, ${
1065+
return ${operationPrefix}Mutation<Awaited<ReturnType<typeof ${operationName}>>, TError, ${
10001066
definitions ? `{${definitions}}` : 'TVariables'
10011067
}, TContext>(${
10021068
!mutationOptionsMutator ? 'mutationFn, mutationOptions' : 'customOptions'

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Generated by orval v6.11.0 🍺
2+
* Generated by orval v6.11.1 🍺
33
* Do not edit manually.
44
* Swagger Petstore
55
* OpenAPI spec version: 1.0.0

1 commit comments

Comments
 (1)

vercel[bot] commented on Feb 19, 2023

@vercel[bot]
Please sign in to comment.