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**: add `skipToken` support and `queryOptions` override to generated `useQuery` hooks (React, Preact). `useQuery` hooks are now generated by default and support `skipToken` for conditional queries. Use `useQuery: false` to opt out.
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 @@ -41,40 +41,46 @@ const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions

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

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 }) => {
const { data } = await getBar({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(options),
meta: {
id: 'getBar',
method: 'get',
path: '/bar'
}
});
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => {
const opts = options !== skipToken ? options : undefined;
return queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: options === skipToken ? skipToken : async ({ queryKey, signal }) => {
const { data } = await getBar({
...opts,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(opts),
meta: {
id: 'getBar',
method: 'get',
path: '/bar'
}
});
};
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 @@ -41,40 +41,62 @@ const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions

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 }) => {
const { data } = await getFoo({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getFooQueryKey(options),
meta: {
id: 'getFoo',
method: 'get',
path: '/foo'
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => {
const opts = options !== skipToken ? options : undefined;
return queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: options === skipToken ? skipToken : async ({ queryKey, signal }) => {
const { data } = await getFoo({
...opts,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getFooQueryKey(opts),
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 }) => {
const { data } = await getBar({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(options),
meta: {
id: 'getBar',
method: 'get',
path: '/bar'
}
});
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => {
const opts = options !== skipToken ? options : undefined;
return queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: options === skipToken ? skipToken : async ({ queryKey, signal }) => {
const { data } = await getBar({
...opts,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(opts),
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 @@ -41,40 +41,62 @@ const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions

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 }) => {
const { data } = await getFoo({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getFooQueryKey(options),
meta: {
id: 'getFoo',
method: 'get',
path: '/foo'
export const getFooOptions = (options?: Options<GetFooData> | typeof skipToken) => {
const opts = options !== skipToken ? options : undefined;
return queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getFooQueryKey>>({
queryFn: options === skipToken ? skipToken : async ({ queryKey, signal }) => {
const { data } = await getFoo({
...opts,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getFooQueryKey(opts),
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 }) => {
const { data } = await getBar({
...options,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(options),
meta: {
id: 'getBar',
method: 'get',
path: '/bar'
}
});
export const getBarOptions = (options?: Options<GetBarData> | typeof skipToken) => {
const opts = options !== skipToken ? options : undefined;
return queryOptions<unknown, DefaultError, unknown, ReturnType<typeof getBarQueryKey>>({
queryFn: options === skipToken ? skipToken : async ({ queryKey, signal }) => {
const { data } = await getBar({
...opts,
...queryKey[0],
signal,
throwOnError: true
});
return data;
},
queryKey: getBarQueryKey(opts),
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 @@ -41,40 +41,46 @@ const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions

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

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