Skip to content

Commit d6ebc7c

Browse files
committed
feat: add useQuery hooks and skipToken support for TanStack query plugins
1 parent b2de023 commit d6ebc7c

File tree

249 files changed

+46496
-2973
lines changed

Some content is hidden

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

249 files changed

+46496
-2973
lines changed

.changeset/warm-rabbits-dance.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@hey-api/openapi-ts": minor
3+
---
4+
5+
**tanstack-query**: expose `skipToken` support and `queryOptions` override on generated TanStack Query hooks

packages/openapi-ts-tests/__snapshots__/plugins/@tanstack/meta/@tanstack/angular-query-experimental.gen.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// This file is auto-generated by @hey-api/openapi-ts
22

3-
import { type DefaultError, queryOptions } from '@tanstack/angular-query-experimental';
3+
import { type DefaultError, queryOptions, skipToken } from '@tanstack/angular-query-experimental';
44

55
import { client } from '../client.gen';
66
import { getBar, getFoo, type Options } from '../sdk.gen';
@@ -39,19 +39,23 @@ const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions
3939
return [params];
4040
};
4141

42+
const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;
43+
44+
const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;
45+
4246
export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);
4347

44-
export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
45-
queryFn: async ({ queryKey, signal }) => {
48+
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
49+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
4650
const { data } = await getFoo({
4751
...options,
4852
...queryKey[0],
4953
signal,
5054
throwOnError: true
5155
});
5256
return data;
53-
},
54-
queryKey: getFooQueryKey(options),
57+
}),
58+
queryKey: getFooQueryKey(resolveOptions(options)),
5559
meta: {
5660
id: 'getFoo',
5761
method: 'get',
@@ -61,17 +65,17 @@ export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unk
6165

6266
export const getBarQueryKey = (options?: Options<GetBarData>) => createQueryKey('getBar', options);
6367

64-
export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
65-
queryFn: async ({ queryKey, signal }) => {
68+
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
69+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
6670
const { data } = await getBar({
6771
...options,
6872
...queryKey[0],
6973
signal,
7074
throwOnError: true
7175
});
7276
return data;
73-
},
74-
queryKey: getBarQueryKey(options),
77+
}),
78+
queryKey: getBarQueryKey(resolveOptions(options)),
7579
meta: {
7680
id: 'getBar',
7781
method: 'get',

packages/openapi-ts-tests/__snapshots__/plugins/@tanstack/meta/@tanstack/preact-query.gen.ts

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// This file is auto-generated by @hey-api/openapi-ts
22

3-
import { type DefaultError, queryOptions } from '@tanstack/preact-query';
3+
import { type DefaultError, queryOptions, skipToken, useQuery } from '@tanstack/preact-query';
44

55
import { client } from '../client.gen';
66
import { getBar, getFoo, type Options } from '../sdk.gen';
@@ -39,42 +39,62 @@ const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions
3939
return [params];
4040
};
4141

42+
const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;
43+
44+
const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;
45+
4246
export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);
4347

44-
export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
45-
queryFn: async ({ queryKey, signal }) => {
48+
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
49+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
4650
const { data } = await getFoo({
4751
...options,
4852
...queryKey[0],
4953
signal,
5054
throwOnError: true
5155
});
5256
return data;
53-
},
54-
queryKey: getFooQueryKey(options),
57+
}),
58+
queryKey: getFooQueryKey(resolveOptions(options)),
5559
meta: {
5660
id: 'getFoo',
5761
method: 'get',
5862
path: '/foo'
5963
}
6064
});
6165

66+
const queryWithOptions = (optionsFn: (...args: Array<any>) => any, options?: any) => {
67+
if (typeof options !== 'object' && options !== undefined) {
68+
return useQuery(optionsFn(options));
69+
}
70+
const { queryOptions, ...sdkOptions } = options ?? {};
71+
return useQuery({ ...optionsFn(sdkOptions), ...queryOptions });
72+
};
73+
74+
export const useGetFooQuery = (options?: (Options<GetFooData> | typeof skipToken) & {
75+
queryOptions?: Partial<Omit<ReturnType<typeof getFooOptions>, 'queryKey' | 'queryFn'>>;
76+
}) => queryWithOptions(getFooOptions, options);
77+
6278
export const getBarQueryKey = (options?: Options<GetBarData>) => createQueryKey('getBar', options);
6379

64-
export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
65-
queryFn: async ({ queryKey, signal }) => {
80+
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
81+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
6682
const { data } = await getBar({
6783
...options,
6884
...queryKey[0],
6985
signal,
7086
throwOnError: true
7187
});
7288
return data;
73-
},
74-
queryKey: getBarQueryKey(options),
89+
}),
90+
queryKey: getBarQueryKey(resolveOptions(options)),
7591
meta: {
7692
id: 'getBar',
7793
method: 'get',
7894
path: '/bar'
7995
}
8096
});
97+
98+
export const useGetBarQuery = (options?: (Options<GetBarData> | typeof skipToken) & {
99+
queryOptions?: Partial<Omit<ReturnType<typeof getBarOptions>, 'queryKey' | 'queryFn'>>;
100+
}) => queryWithOptions(getBarOptions, options);

packages/openapi-ts-tests/__snapshots__/plugins/@tanstack/meta/@tanstack/react-query.gen.ts

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// This file is auto-generated by @hey-api/openapi-ts
22

3-
import { type DefaultError, queryOptions } from '@tanstack/react-query';
3+
import { type DefaultError, queryOptions, skipToken, useQuery } from '@tanstack/react-query';
44

55
import { client } from '../client.gen';
66
import { getBar, getFoo, type Options } from '../sdk.gen';
@@ -39,42 +39,62 @@ const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions
3939
return [params];
4040
};
4141

42+
const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;
43+
44+
const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;
45+
4246
export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);
4347

44-
export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
45-
queryFn: async ({ queryKey, signal }) => {
48+
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
49+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
4650
const { data } = await getFoo({
4751
...options,
4852
...queryKey[0],
4953
signal,
5054
throwOnError: true
5155
});
5256
return data;
53-
},
54-
queryKey: getFooQueryKey(options),
57+
}),
58+
queryKey: getFooQueryKey(resolveOptions(options)),
5559
meta: {
5660
id: 'getFoo',
5761
method: 'get',
5862
path: '/foo'
5963
}
6064
});
6165

66+
const queryWithOptions = (optionsFn: (...args: Array<any>) => any, options?: any) => {
67+
if (typeof options !== 'object' && options !== undefined) {
68+
return useQuery(optionsFn(options));
69+
}
70+
const { queryOptions, ...sdkOptions } = options ?? {};
71+
return useQuery({ ...optionsFn(sdkOptions), ...queryOptions });
72+
};
73+
74+
export const useGetFooQuery = (options?: (Options<GetFooData> | typeof skipToken) & {
75+
queryOptions?: Partial<Omit<ReturnType<typeof getFooOptions>, 'queryKey' | 'queryFn'>>;
76+
}) => queryWithOptions(getFooOptions, options);
77+
6278
export const getBarQueryKey = (options?: Options<GetBarData>) => createQueryKey('getBar', options);
6379

64-
export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
65-
queryFn: async ({ queryKey, signal }) => {
80+
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
81+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
6682
const { data } = await getBar({
6783
...options,
6884
...queryKey[0],
6985
signal,
7086
throwOnError: true
7187
});
7288
return data;
73-
},
74-
queryKey: getBarQueryKey(options),
89+
}),
90+
queryKey: getBarQueryKey(resolveOptions(options)),
7591
meta: {
7692
id: 'getBar',
7793
method: 'get',
7894
path: '/bar'
7995
}
8096
});
97+
98+
export const useGetBarQuery = (options?: (Options<GetBarData> | typeof skipToken) & {
99+
queryOptions?: Partial<Omit<ReturnType<typeof getBarOptions>, 'queryKey' | 'queryFn'>>;
100+
}) => queryWithOptions(getBarOptions, options);

packages/openapi-ts-tests/__snapshots__/plugins/@tanstack/meta/@tanstack/solid-query.gen.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// This file is auto-generated by @hey-api/openapi-ts
22

3-
import { type DefaultError, queryOptions } from '@tanstack/solid-query';
3+
import { type DefaultError, queryOptions, skipToken } from '@tanstack/solid-query';
44

55
import { client } from '../client.gen';
66
import { getBar, getFoo, type Options } from '../sdk.gen';
@@ -39,19 +39,23 @@ const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions
3939
return [params];
4040
};
4141

42+
const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;
43+
44+
const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;
45+
4246
export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);
4347

44-
export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
45-
queryFn: async ({ queryKey, signal }) => {
48+
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
49+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
4650
const { data } = await getFoo({
4751
...options,
4852
...queryKey[0],
4953
signal,
5054
throwOnError: true
5155
});
5256
return data;
53-
},
54-
queryKey: getFooQueryKey(options),
57+
}),
58+
queryKey: getFooQueryKey(resolveOptions(options)),
5559
meta: {
5660
id: 'getFoo',
5761
method: 'get',
@@ -61,17 +65,17 @@ export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unk
6165

6266
export const getBarQueryKey = (options?: Options<GetBarData>) => createQueryKey('getBar', options);
6367

64-
export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
65-
queryFn: async ({ queryKey, signal }) => {
68+
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
69+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
6670
const { data } = await getBar({
6771
...options,
6872
...queryKey[0],
6973
signal,
7074
throwOnError: true
7175
});
7276
return data;
73-
},
74-
queryKey: getBarQueryKey(options),
77+
}),
78+
queryKey: getBarQueryKey(resolveOptions(options)),
7579
meta: {
7680
id: 'getBar',
7781
method: 'get',

packages/openapi-ts-tests/__snapshots__/plugins/@tanstack/meta/@tanstack/svelte-query.gen.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// This file is auto-generated by @hey-api/openapi-ts
22

3-
import { type DefaultError, queryOptions } from '@tanstack/svelte-query';
3+
import { type DefaultError, queryOptions, skipToken } from '@tanstack/svelte-query';
44

55
import { client } from '../client.gen';
66
import { getBar, getFoo, type Options } from '../sdk.gen';
@@ -39,19 +39,23 @@ const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions
3939
return [params];
4040
};
4141

42+
const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;
43+
44+
const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;
45+
4246
export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);
4347

44-
export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
45-
queryFn: async ({ queryKey, signal }) => {
48+
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
49+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
4650
const { data } = await getFoo({
4751
...options,
4852
...queryKey[0],
4953
signal,
5054
throwOnError: true
5155
});
5256
return data;
53-
},
54-
queryKey: getFooQueryKey(options),
57+
}),
58+
queryKey: getFooQueryKey(resolveOptions(options)),
5559
meta: {
5660
id: 'getFoo',
5761
method: 'get',
@@ -61,17 +65,17 @@ export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unk
6165

6266
export const getBarQueryKey = (options?: Options<GetBarData>) => createQueryKey('getBar', options);
6367

64-
export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
65-
queryFn: async ({ queryKey, signal }) => {
68+
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
69+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
6670
const { data } = await getBar({
6771
...options,
6872
...queryKey[0],
6973
signal,
7074
throwOnError: true
7175
});
7276
return data;
73-
},
74-
queryKey: getBarQueryKey(options),
77+
}),
78+
queryKey: getBarQueryKey(resolveOptions(options)),
7579
meta: {
7680
id: 'getBar',
7781
method: 'get',

packages/openapi-ts-tests/__snapshots__/plugins/@tanstack/meta/@tanstack/vue-query.gen.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// This file is auto-generated by @hey-api/openapi-ts
22

3-
import { type DefaultError, queryOptions } from '@tanstack/vue-query';
3+
import { type DefaultError, queryOptions, skipToken } from '@tanstack/vue-query';
44

55
import { client } from '../client.gen';
66
import { getBar, getFoo, type Options } from '../sdk.gen';
@@ -39,19 +39,23 @@ const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions
3939
return [params];
4040
};
4141

42+
const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;
43+
44+
const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;
45+
4246
export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);
4347

44-
export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
45-
queryFn: async ({ queryKey, signal }) => {
48+
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
49+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
4650
const { data } = await getFoo({
4751
...options,
4852
...queryKey[0],
4953
signal,
5054
throwOnError: true
5155
});
5256
return data;
53-
},
54-
queryKey: getFooQueryKey(options),
57+
}),
58+
queryKey: getFooQueryKey(resolveOptions(options)),
5559
meta: {
5660
id: 'getFoo',
5761
method: 'get',
@@ -61,17 +65,17 @@ export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unk
6165

6266
export const getBarQueryKey = (options?: Options<GetBarData>) => createQueryKey('getBar', options);
6367

64-
export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
65-
queryFn: async ({ queryKey, signal }) => {
68+
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
69+
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
6670
const { data } = await getBar({
6771
...options,
6872
...queryKey[0],
6973
signal,
7074
throwOnError: true
7175
});
7276
return data;
73-
},
74-
queryKey: getBarQueryKey(options),
77+
}),
78+
queryKey: getBarQueryKey(resolveOptions(options)),
7579
meta: {
7680
id: 'getBar',
7781
method: 'get',

0 commit comments

Comments
 (0)