Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/warm-rabbits-dance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@hey-api/openapi-ts": minor
---

**tanstack-query**: expose `skipToken` support and `queryOptions` override on generated TanStack Query hooks
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// This file is auto-generated by @hey-api/openapi-ts

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

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

const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;

const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;

export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);

export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getFoo({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getFooQueryKey(options),
}),
queryKey: getFooQueryKey(resolveOptions(options)),
meta: {
id: 'getFoo',
method: 'get',
Expand All @@ -61,17 +65,17 @@ export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unk

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

export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getBar({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(options),
}),
queryKey: getBarQueryKey(resolveOptions(options)),
meta: {
id: 'getBar',
method: 'get',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// This file is auto-generated by @hey-api/openapi-ts

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

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

const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;

const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;

export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);

export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getFoo({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getFooQueryKey(options),
}),
queryKey: getFooQueryKey(resolveOptions(options)),
meta: {
id: 'getFoo',
method: 'get',
path: '/foo'
}
});

const queryWithOptions = (optionsFn: (...args: Array<any>) => any, options?: any) => {
if (typeof options !== 'object' && options !== undefined) {
return useQuery(optionsFn(options));
}
const { queryOptions, ...sdkOptions } = options ?? {};
return useQuery({ ...optionsFn(sdkOptions), ...queryOptions });
};

export const useGetFooQuery = (options?: (Options<GetFooData> | typeof skipToken) & {
queryOptions?: Partial<Omit<ReturnType<typeof getFooOptions>, 'queryKey' | 'queryFn'>>;
}) => queryWithOptions(getFooOptions, options);

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

export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getBar({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(options),
}),
queryKey: getBarQueryKey(resolveOptions(options)),
meta: {
id: 'getBar',
method: 'get',
path: '/bar'
}
});

export const useGetBarQuery = (options?: (Options<GetBarData> | typeof skipToken) & {
queryOptions?: Partial<Omit<ReturnType<typeof getBarOptions>, 'queryKey' | 'queryFn'>>;
}) => queryWithOptions(getBarOptions, options);
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// This file is auto-generated by @hey-api/openapi-ts

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

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

const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;

const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;

export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);

export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getFoo({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getFooQueryKey(options),
}),
queryKey: getFooQueryKey(resolveOptions(options)),
meta: {
id: 'getFoo',
method: 'get',
path: '/foo'
}
});

const queryWithOptions = (optionsFn: (...args: Array<any>) => any, options?: any) => {
if (typeof options !== 'object' && options !== undefined) {
return useQuery(optionsFn(options));
}
const { queryOptions, ...sdkOptions } = options ?? {};
return useQuery({ ...optionsFn(sdkOptions), ...queryOptions });
};

export const useGetFooQuery = (options?: (Options<GetFooData> | typeof skipToken) & {
queryOptions?: Partial<Omit<ReturnType<typeof getFooOptions>, 'queryKey' | 'queryFn'>>;
}) => queryWithOptions(getFooOptions, options);

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

export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getBar({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(options),
}),
queryKey: getBarQueryKey(resolveOptions(options)),
meta: {
id: 'getBar',
method: 'get',
path: '/bar'
}
});

export const useGetBarQuery = (options?: (Options<GetBarData> | typeof skipToken) & {
queryOptions?: Partial<Omit<ReturnType<typeof getBarOptions>, 'queryKey' | 'queryFn'>>;
}) => queryWithOptions(getBarOptions, options);
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// This file is auto-generated by @hey-api/openapi-ts

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

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

const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;

const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;

export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);

export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getFoo({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getFooQueryKey(options),
}),
queryKey: getFooQueryKey(resolveOptions(options)),
meta: {
id: 'getFoo',
method: 'get',
Expand All @@ -61,17 +65,17 @@ export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unk

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

export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getBar({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(options),
}),
queryKey: getBarQueryKey(resolveOptions(options)),
meta: {
id: 'getBar',
method: 'get',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// This file is auto-generated by @hey-api/openapi-ts

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

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

const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;

const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;

export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);

export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getFoo({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getFooQueryKey(options),
}),
queryKey: getFooQueryKey(resolveOptions(options)),
meta: {
id: 'getFoo',
method: 'get',
Expand All @@ -61,17 +65,17 @@ export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unk

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

export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getBar({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(options),
}),
queryKey: getBarQueryKey(resolveOptions(options)),
meta: {
id: 'getBar',
method: 'get',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// This file is auto-generated by @hey-api/openapi-ts

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

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

const resolveOptions = <T>(options: T | typeof skipToken) => options === skipToken ? undefined : options;

const resolveQueryFn = <T>(options: T | typeof skipToken, queryFn: T) => options === skipToken ? skipToken : queryFn;

export const getFooQueryKey = (options?: Options<GetFooData>) => createQueryKey('getFoo', options);

export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getFoo({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getFooQueryKey(options),
}),
queryKey: getFooQueryKey(resolveOptions(options)),
meta: {
id: 'getFoo',
method: 'get',
Expand All @@ -61,17 +65,17 @@ export const getFooOptions = (options?: Options<GetFooData>) => queryOptions<unk

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

export const getBarOptions = (options?: Options<GetBarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: async ({ queryKey, signal }) => {
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: resolveQueryFn(options, async ({ queryKey, signal }) => {
const { data } = await getBar({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(options),
}),
queryKey: getBarQueryKey(resolveOptions(options)),
meta: {
id: 'getBar',
method: 'get',
Expand Down
Loading
Loading