From a46259eb4d2ed1c95908a5ad3d69b0495a8aacb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubos=20=E2=80=8B?= Date: Thu, 12 Jun 2025 19:28:10 +0900 Subject: [PATCH] fix(tanstack-query): add name builder options for all generated artifacts --- .changeset/hip-chefs-drop.md | 5 + .changeset/unlucky-kiwis-smile.md | 5 + docs/openapi-ts/configuration.md | 17 ++ docs/openapi-ts/plugins/tanstack-query.md | 23 ++- .../angular-query-experimental.gen.ts | 161 ++++++++++++++++++ .../name-builder}/client.gen.ts | 0 .../name-builder}/index.ts | 0 .../name-builder/sdk.gen.ts | 61 +++++++ .../name-builder/types.gen.ts | 101 +++++++++++ .../name-builder/@tanstack/react-query.gen.ts | 161 ++++++++++++++++++ .../react-query/name-builder/client.gen.ts | 16 ++ .../react-query/name-builder/index.ts | 3 + .../react-query/name-builder/sdk.gen.ts | 61 +++++++ .../react-query/name-builder/types.gen.ts | 101 +++++++++++ .../name-builder/@tanstack/solid-query.gen.ts | 161 ++++++++++++++++++ .../solid-query/name-builder/client.gen.ts | 16 ++ .../solid-query/name-builder/index.ts | 3 + .../solid-query/name-builder/sdk.gen.ts | 61 +++++++ .../solid-query/name-builder/types.gen.ts | 101 +++++++++++ .../@tanstack/svelte-query.gen.ts | 161 ++++++++++++++++++ .../svelte-query/name-builder/client.gen.ts | 16 ++ .../svelte-query/name-builder/index.ts | 3 + .../svelte-query/name-builder/sdk.gen.ts | 61 +++++++ .../svelte-query/name-builder/types.gen.ts | 101 +++++++++++ .../name-builder/@tanstack/vue-query.gen.ts | 161 ++++++++++++++++++ .../vue-query/name-builder/client.gen.ts | 16 ++ .../@tanstack/vue-query/name-builder/index.ts | 3 + .../vue-query/name-builder/sdk.gen.ts | 61 +++++++ .../vue-query/name-builder/types.gen.ts | 101 +++++++++++ .../angular-query-experimental.gen.ts | 161 ++++++++++++++++++ .../name-builder/client.gen.ts | 16 ++ .../name-builder/index.ts | 3 + .../name-builder/sdk.gen.ts | 61 +++++++ .../name-builder/types.gen.ts | 101 +++++++++++ .../name-builder/@tanstack/react-query.gen.ts | 161 ++++++++++++++++++ .../react-query/name-builder/client.gen.ts | 16 ++ .../react-query/name-builder/index.ts | 3 + .../react-query/name-builder/sdk.gen.ts | 61 +++++++ .../react-query/name-builder/types.gen.ts | 101 +++++++++++ .../name-builder/@tanstack/solid-query.gen.ts | 161 ++++++++++++++++++ .../solid-query/name-builder/client.gen.ts | 16 ++ .../solid-query/name-builder/index.ts | 3 + .../solid-query/name-builder/sdk.gen.ts | 61 +++++++ .../solid-query/name-builder/types.gen.ts | 101 +++++++++++ .../@tanstack/svelte-query.gen.ts | 161 ++++++++++++++++++ .../svelte-query/name-builder/client.gen.ts | 16 ++ .../svelte-query/name-builder/index.ts | 3 + .../svelte-query/name-builder/sdk.gen.ts | 61 +++++++ .../svelte-query/name-builder/types.gen.ts | 101 +++++++++++ .../name-builder/@tanstack/vue-query.gen.ts | 161 ++++++++++++++++++ .../vue-query/name-builder/client.gen.ts | 16 ++ .../@tanstack/vue-query/name-builder/index.ts | 3 + .../vue-query/name-builder/sdk.gen.ts | 61 +++++++ .../vue-query/name-builder/types.gen.ts | 101 +++++++++++ .../@tanstack/react-query.gen.ts | 123 ------------- .../3.1.x/pagination-ref-any-of/sdk.gen.ts | 30 ---- .../3.1.x/pagination-ref-any-of/types.gen.ts | 23 --- .../angular-query-experimental.gen.ts | 161 ++++++++++++++++++ .../name-builder/client.gen.ts | 16 ++ .../name-builder/index.ts | 3 + .../name-builder/sdk.gen.ts | 61 +++++++ .../name-builder/types.gen.ts | 101 +++++++++++ .../name-builder/@tanstack/react-query.gen.ts | 161 ++++++++++++++++++ .../react-query/name-builder/client.gen.ts | 16 ++ .../react-query/name-builder/index.ts | 3 + .../react-query/name-builder/sdk.gen.ts | 61 +++++++ .../react-query/name-builder/types.gen.ts | 101 +++++++++++ .../name-builder/@tanstack/solid-query.gen.ts | 161 ++++++++++++++++++ .../solid-query/name-builder/client.gen.ts | 16 ++ .../solid-query/name-builder/index.ts | 3 + .../solid-query/name-builder/sdk.gen.ts | 61 +++++++ .../solid-query/name-builder/types.gen.ts | 101 +++++++++++ .../@tanstack/svelte-query.gen.ts | 161 ++++++++++++++++++ .../svelte-query/name-builder/client.gen.ts | 16 ++ .../svelte-query/name-builder/index.ts | 3 + .../svelte-query/name-builder/sdk.gen.ts | 61 +++++++ .../svelte-query/name-builder/types.gen.ts | 101 +++++++++++ .../name-builder/@tanstack/vue-query.gen.ts | 161 ++++++++++++++++++ .../vue-query/name-builder/client.gen.ts | 16 ++ .../@tanstack/vue-query/name-builder/index.ts | 3 + .../vue-query/name-builder/sdk.gen.ts | 61 +++++++ .../vue-query/name-builder/types.gen.ts | 101 +++++++++++ .../test/openapi-ts.config.ts | 10 +- .../openapi-ts-tests/test/plugins.test.ts | 100 +++++++++++ packages/openapi-ts/src/generate/output.ts | 1 + packages/openapi-ts/src/ir/pagination.ts | 2 +- .../angular-query-experimental/config.ts | 5 + .../query-core/infiniteQueryOptions.ts | 31 +++- .../@tanstack/query-core/mutationOptions.ts | 23 ++- .../plugins/@tanstack/query-core/queryKey.ts | 59 +++++-- .../@tanstack/query-core/queryOptions.ts | 25 ++- .../plugins/@tanstack/query-core/types.d.ts | 35 ++++ .../plugins/@tanstack/react-query/config.ts | 5 + .../plugins/@tanstack/solid-query/config.ts | 5 + .../plugins/@tanstack/svelte-query/config.ts | 5 + .../src/plugins/@tanstack/vue-query/config.ts | 5 + 96 files changed, 5433 insertions(+), 215 deletions(-) create mode 100644 .changeset/hip-chefs-drop.md create mode 100644 .changeset/unlucky-kiwis-smile.md create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts rename packages/openapi-ts-tests/test/__snapshots__/{3.1.x/pagination-ref-any-of => 2.0.x/plugins/@tanstack/angular-query-experimental/name-builder}/client.gen.ts (100%) rename packages/openapi-ts-tests/test/__snapshots__/{3.1.x/pagination-ref-any-of => 2.0.x/plugins/@tanstack/angular-query-experimental/name-builder}/index.ts (100%) create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts delete mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/@tanstack/react-query.gen.ts delete mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/sdk.gen.ts delete mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/index.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts create mode 100644 packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts diff --git a/.changeset/hip-chefs-drop.md b/.changeset/hip-chefs-drop.md new file mode 100644 index 000000000..9682a2fa0 --- /dev/null +++ b/.changeset/hip-chefs-drop.md @@ -0,0 +1,5 @@ +--- +'@hey-api/openapi-ts': patch +--- + +fix(tanstack-query): add name builder options for all generated artifacts diff --git a/.changeset/unlucky-kiwis-smile.md b/.changeset/unlucky-kiwis-smile.md new file mode 100644 index 000000000..f391aeff5 --- /dev/null +++ b/.changeset/unlucky-kiwis-smile.md @@ -0,0 +1,5 @@ +--- +'@hey-api/openapi-ts': patch +--- + +fix(parser): set correct subscription context for plugins diff --git a/docs/openapi-ts/configuration.md b/docs/openapi-ts/configuration.md index 3e3698276..2e37b0cc0 100644 --- a/docs/openapi-ts/configuration.md +++ b/docs/openapi-ts/configuration.md @@ -493,6 +493,23 @@ export default { }; ``` +## Pagination + +Paginated operations are detected by having a pagination keyword in its parameters or request body. By default, we consider the following to be pagination keywords: `after`, `before`, `cursor`, `offset`, `page`, and `start`. You can override these keywords by providing your own keywords array using `input.pagination.keywords`. + +```js +export default { + input: { + pagination: { + keywords: ['custom', 'pagination', 'keywords'], // [!code ++] + }, + path: 'https://get.heyapi.dev/hey-api/backend', + }, + output: 'src/client', + plugins: ['@hey-api/client-fetch'], +}; +``` + ## Patch There are times when you need to modify your input before it's processed further. A common use case is fixing an invalid specification or adding a missing field. You can apply custom patches with `input.patch`. diff --git a/docs/openapi-ts/plugins/tanstack-query.md b/docs/openapi-ts/plugins/tanstack-query.md index 30313ab52..f4c06d478 100644 --- a/docs/openapi-ts/plugins/tanstack-query.md +++ b/docs/openapi-ts/plugins/tanstack-query.md @@ -114,7 +114,7 @@ The TanStack Query plugin will generate the following artifacts, depending on th ## Queries -Queries are generated from GET and POST endpoints. The generated functions follow the naming convention of SDK functions and append `Options`, e.g. `getPetByIdOptions()`. +Queries are generated from GET and POST endpoints. The generated query functions follow the naming convention of SDK functions and by default append `Options`, e.g. `getPetByIdOptions()`. ```ts const { data, error } = useQuery({ @@ -126,9 +126,11 @@ const { data, error } = useQuery({ }); ``` +You can customize query function names using `queryOptionsNameBuilder`. + ## Infinite Queries -Infinite queries are generated from GET and POST endpoints if we detect a pagination parameter. The generated functions follow the naming convention of SDK functions and append `InfiniteOptions`, e.g. `getFooInfiniteOptions()`. +Infinite queries are generated from GET and POST endpoints if we detect a [pagination](/openapi-ts/configuration#pagination) parameter. The generated infinite query functions follow the naming convention of SDK functions and by default append `InfiniteOptions`, e.g. `getFooInfiniteOptions()`. ```ts const { data, error } = useInfiniteQuery({ @@ -142,18 +144,11 @@ const { data, error } = useInfiniteQuery({ }); ``` -Infinite queries are recognized by having one of these keywords in the endpoint's parameters: - -- after -- before -- cursor -- offset -- page -- start +You can customize infinite query function names using `infiniteQueryOptionsNameBuilder`. ## Mutations -Mutations are generated from DELETE, PATCH, POST, and PUT endpoints. The generated functions follow the naming convention of SDK functions and append `Mutation`, e.g. `addPetMutation()`. +Mutations are generated from DELETE, PATCH, POST, and PUT endpoints. The generated mutation functions follow the naming convention of SDK functions and by default append `Mutation`, e.g. `addPetMutation()`. ```ts const addPet = useMutation({ @@ -170,6 +165,8 @@ addPet.mutate({ }); ``` +You can customize mutation function names using `mutationOptionsNameBuilder`. + ## Query Keys Query keys are generated for both queries and infinite queries. If you have access to the result of query or infinite query options function, you can get the query key from the `queryKey` field. @@ -182,7 +179,7 @@ const { queryKey } = getPetByIdOptions({ }); ``` -Alternatively, you can access the same query key by calling `QueryKey` or `InfiniteQueryKey` function. +Alternatively, you can access the same query key by calling query key functions. The generated query key functions follow the naming convention of SDK functions and by default append `QueryKey` or `InfiniteQueryKey`, e.g. `getPetByIdQueryKey()` or `getPetByIdInfiniteQueryKey()`. ```ts const queryKey = getPetByIdQueryKey({ @@ -192,5 +189,7 @@ const queryKey = getPetByIdQueryKey({ }); ``` +You can customize query key function names using `queryKeyNameBuilder` and `infiniteQueryKeyNameBuilder`. + diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts new file mode 100644 index 000000000..e0e64f901 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type MutationOptions, type DefaultError } from '@tanstack/angular-query-experimental'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client.gen.ts similarity index 100% rename from packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/client.gen.ts rename to packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client.gen.ts diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/index.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/index.ts similarity index 100% rename from packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/index.ts rename to packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/index.ts diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts new file mode 100644 index 000000000..314be14d3 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: string; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts new file mode 100644 index 000000000..509c565d7 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type UseMutationOptions, type DefaultError } from '@tanstack/react-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/types.gen.ts new file mode 100644 index 000000000..314be14d3 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: string; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts new file mode 100644 index 000000000..1f3e34433 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type MutationOptions, type DefaultError } from '@tanstack/solid-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts new file mode 100644 index 000000000..314be14d3 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: string; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts new file mode 100644 index 000000000..c4c627ae1 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type MutationOptions, type DefaultError } from '@tanstack/svelte-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts new file mode 100644 index 000000000..314be14d3 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: string; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts new file mode 100644 index 000000000..b6a5b9699 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type UseMutationOptions, type DefaultError } from '@tanstack/vue-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts new file mode 100644 index 000000000..314be14d3 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: string; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts new file mode 100644 index 000000000..e0e64f901 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type MutationOptions, type DefaultError } from '@tanstack/angular-query-experimental'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts new file mode 100644 index 000000000..e8d29ac66 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts new file mode 100644 index 000000000..509c565d7 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type UseMutationOptions, type DefaultError } from '@tanstack/react-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/types.gen.ts new file mode 100644 index 000000000..e8d29ac66 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts new file mode 100644 index 000000000..1f3e34433 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type MutationOptions, type DefaultError } from '@tanstack/solid-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts new file mode 100644 index 000000000..e8d29ac66 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts new file mode 100644 index 000000000..c4c627ae1 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type MutationOptions, type DefaultError } from '@tanstack/svelte-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts new file mode 100644 index 000000000..e8d29ac66 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts new file mode 100644 index 000000000..b6a5b9699 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type UseMutationOptions, type DefaultError } from '@tanstack/vue-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts new file mode 100644 index 000000000..e8d29ac66 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/@tanstack/react-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/@tanstack/react-query.gen.ts deleted file mode 100644 index 3dc6cc795..000000000 --- a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/@tanstack/react-query.gen.ts +++ /dev/null @@ -1,123 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import { type Options, postFoo } from '../sdk.gen'; -import { queryOptions, infiniteQueryOptions, type InfiniteData, type DefaultError, type UseMutationOptions } from '@tanstack/react-query'; -import type { PostFooData } from '../types.gen'; -import { client as _heyApiClient } from '../client.gen'; - -export type QueryKey = [ - Pick & { - _id: string; - _infinite?: boolean; - } -]; - -const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ - QueryKey[0] -] => { - const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; - if (infinite) { - params._infinite = infinite; - } - if (options?.body) { - params.body = options.body; - } - if (options?.headers) { - params.headers = options.headers; - } - if (options?.path) { - params.path = options.path; - } - if (options?.query) { - params.query = options.query; - } - return [ - params - ]; -}; - -export const postFooQueryKey = (options: Options) => createQueryKey('postFoo', options); - -export const postFooOptions = (options: Options) => { - return queryOptions({ - queryFn: async ({ queryKey, signal }) => { - const { data } = await postFoo({ - ...options, - ...queryKey[0], - signal, - throwOnError: true - }); - return data; - }, - queryKey: postFooQueryKey(options) - }); -}; - -const createInfiniteParams = [0], 'body' | 'headers' | 'path' | 'query'>>(queryKey: QueryKey, page: K) => { - const params = queryKey[0]; - if (page.body) { - params.body = { - ...queryKey[0].body as any, - ...page.body as any - }; - } - if (page.headers) { - params.headers = { - ...queryKey[0].headers, - ...page.headers - }; - } - if (page.path) { - params.path = { - ...queryKey[0].path as any, - ...page.path as any - }; - } - if (page.query) { - params.query = { - ...queryKey[0].query as any, - ...page.query as any - }; - } - return params as unknown as typeof page; -}; - -export const postFooInfiniteQueryKey = (options: Options): QueryKey> => createQueryKey('postFoo', options, true); - -export const postFooInfiniteOptions = (options: Options) => { - return infiniteQueryOptions, QueryKey>, number | null | Pick>[0], 'body' | 'headers' | 'path' | 'query'>>( - // @ts-ignore - { - queryFn: async ({ pageParam, queryKey, signal }) => { - // @ts-ignore - const page: Pick>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { - body: { - page: pageParam - } - }; - const params = createInfiniteParams(queryKey, page); - const { data } = await postFoo({ - ...options, - ...params, - signal, - throwOnError: true - }); - return data; - }, - queryKey: postFooInfiniteQueryKey(options) - }); -}; - -export const postFooMutation = (options?: Partial>): UseMutationOptions> => { - const mutationOptions: UseMutationOptions> = { - mutationFn: async (localOptions) => { - const { data } = await postFoo({ - ...options, - ...localOptions, - throwOnError: true - }); - return data; - } - }; - return mutationOptions; -}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/sdk.gen.ts deleted file mode 100644 index e40d43474..000000000 --- a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/sdk.gen.ts +++ /dev/null @@ -1,30 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; -import type { PostFooData, PostFooResponses } from './types.gen'; -import { client as _heyApiClient } from './client.gen'; - -export type Options = ClientOptions & { - /** - * You can provide a client instance returned by `createClient()` instead of - * individual options. This might be also useful if you want to implement a - * custom client. - */ - client?: Client; - /** - * You can pass arbitrary values through the `meta` object. This can be - * used to access values that aren't defined as part of the SDK function. - */ - meta?: Record; -}; - -export const postFoo = (options: Options) => { - return (options.client ?? _heyApiClient).post({ - url: '/foo', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers - } - }); -}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/types.gen.ts deleted file mode 100644 index deb98bc46..000000000 --- a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/pagination-ref-any-of/types.gen.ts +++ /dev/null @@ -1,23 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -export type Foo = { - page?: number | null; -}; - -export type PostFooData = { - body: Foo; - path?: never; - query?: never; - url: '/foo'; -}; - -export type PostFooResponses = { - /** - * OK - */ - 200: unknown; -}; - -export type ClientOptions = { - baseUrl: `${string}://${string}` | (string & {}); -}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts new file mode 100644 index 000000000..e0e64f901 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/@tanstack/angular-query-experimental.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type MutationOptions, type DefaultError } from '@tanstack/angular-query-experimental'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts new file mode 100644 index 000000000..e8d29ac66 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts new file mode 100644 index 000000000..509c565d7 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/@tanstack/react-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type UseMutationOptions, type DefaultError } from '@tanstack/react-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/types.gen.ts new file mode 100644 index 000000000..e8d29ac66 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts new file mode 100644 index 000000000..1f3e34433 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/@tanstack/solid-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type MutationOptions, type DefaultError } from '@tanstack/solid-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts new file mode 100644 index 000000000..e8d29ac66 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts new file mode 100644 index 000000000..c4c627ae1 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/@tanstack/svelte-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type MutationOptions, type DefaultError } from '@tanstack/svelte-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): MutationOptions> => { + const mutationOptions: MutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts new file mode 100644 index 000000000..e8d29ac66 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts new file mode 100644 index 000000000..b6a5b9699 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/@tanstack/vue-query.gen.ts @@ -0,0 +1,161 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { type Options, getFoo, fooPost, fooPut, getFooBar, fooBarPost, fooBarPut } from '../sdk.gen'; +import { queryOptions, type UseMutationOptions, type DefaultError } from '@tanstack/vue-query'; +import type { GetFooData, FooPostData, FooPostResponse, FooPutData, FooPutResponse, GetFooBarData, FooBarPostData, FooBarPostResponse, FooBarPutData, FooBarPutResponse } from '../types.gen'; +import { client as _heyApiClient } from '../client.gen'; + +export type QueryKey = [ + Pick & { + _id: string; + _infinite?: boolean; + } +]; + +const createQueryKey = (id: string, options?: TOptions, infinite?: boolean): [ + QueryKey[0] +] => { + const params: QueryKey[0] = { _id: id, baseUrl: (options?.client ?? _heyApiClient).getConfig().baseUrl } as QueryKey[0]; + if (infinite) { + params._infinite = infinite; + } + if (options?.body) { + params.body = options.body; + } + if (options?.headers) { + params.headers = options.headers; + } + if (options?.path) { + params.path = options.path; + } + if (options?.query) { + params.query = options.query; + } + return [ + params + ]; +}; + +export const getFooD = (options?: Options) => createQueryKey('getFoo', options); + +export const getFooE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFoo({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooD(options) + }); +}; + +export const fooPostD = (options?: Options) => createQueryKey('fooPost', options); + +export const fooPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooPostD(options) + }); +}; + +export const fooPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getFooBarD = (options?: Options) => createQueryKey('getFooBar', options); + +export const getFooBarE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getFooBar({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getFooBarD(options) + }); +}; + +export const fooBarPostD = (options?: Options) => createQueryKey('fooBarPost', options); + +export const fooBarPostE = (options?: Options) => { + return queryOptions({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await fooBarPost({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: fooBarPostD(options) + }); +}; + +export const fooBarPostC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPost({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const fooBarPutC = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (localOptions) => { + const { data } = await fooBarPut({ + ...options, + ...localOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts new file mode 100644 index 000000000..6759c1f28 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client.gen.ts @@ -0,0 +1,16 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { ClientOptions } from './types.gen'; +import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from '@hey-api/client-fetch'; + +/** + * The `createClientConfig()` function will be called on client initialization + * and the returned object will become the client's initial configuration. + * + * You may want to initialize your client this way instead of calling + * `setConfig()`. This is useful for example if you're using Next.js + * to ensure your client always has the correct values. + */ +export type CreateClientConfig = (override?: Config) => Config & T>; + +export const client = createClient(createConfig()); \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/index.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/index.ts new file mode 100644 index 000000000..e64537d21 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/index.ts @@ -0,0 +1,3 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './types.gen'; +export * from './sdk.gen'; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts new file mode 100644 index 000000000..c44a97f6c --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/sdk.gen.ts @@ -0,0 +1,61 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch'; +import type { GetFooData, GetFooResponses, FooPostData, FooPostResponses, FooPutData, FooPutResponses, GetFooBarData, GetFooBarResponses, FooBarPostData, FooBarPostResponses, FooBarPutData, FooBarPutResponses } from './types.gen'; +import { client as _heyApiClient } from './client.gen'; + +export type Options = ClientOptions & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client; + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record; +}; + +export const getFoo = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo', + ...options + }); +}; + +export const fooPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo', + ...options + }); +}; + +export const fooPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo', + ...options + }); +}; + +export const getFooBar = (options?: Options) => { + return (options?.client ?? _heyApiClient).get({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPost = (options?: Options) => { + return (options?.client ?? _heyApiClient).post({ + url: '/foo/bar', + ...options + }); +}; + +export const fooBarPut = (options?: Options) => { + return (options?.client ?? _heyApiClient).put({ + url: '/foo/bar', + ...options + }); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts new file mode 100644 index 000000000..e8d29ac66 --- /dev/null +++ b/packages/openapi-ts-tests/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/types.gen.ts @@ -0,0 +1,101 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type GetFooData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type GetFooResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooResponse = GetFooResponses[keyof GetFooResponses]; + +export type FooPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPostResponse = FooPostResponses[keyof FooPostResponses]; + +export type FooPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo'; +}; + +export type FooPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooPutResponse = FooPutResponses[keyof FooPutResponses]; + +export type GetFooBarData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type GetFooBarResponses = { + /** + * OK + */ + 200: string; +}; + +export type GetFooBarResponse = GetFooBarResponses[keyof GetFooBarResponses]; + +export type FooBarPostData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPostResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPostResponse = FooBarPostResponses[keyof FooBarPostResponses]; + +export type FooBarPutData = { + body?: never; + path?: never; + query?: never; + url: '/foo/bar'; +}; + +export type FooBarPutResponses = { + /** + * OK + */ + 200: string; +}; + +export type FooBarPutResponse = FooBarPutResponses[keyof FooBarPutResponses]; + +export type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; \ No newline at end of file diff --git a/packages/openapi-ts-tests/test/openapi-ts.config.ts b/packages/openapi-ts-tests/test/openapi-ts.config.ts index 14713109d..b9347363e 100644 --- a/packages/openapi-ts-tests/test/openapi-ts.config.ts +++ b/packages/openapi-ts-tests/test/openapi-ts.config.ts @@ -39,6 +39,9 @@ export default defineConfig(() => { // }, }, // organization: 'hey-api', + // pagination: { + // keywords: ['aa'], + // }, // path: { // components: {}, // info: { @@ -143,7 +146,12 @@ export default defineConfig(() => { }, { exportFromIndex: true, - // name: '@tanstack/react-query', + infiniteQueryKeyNameBuilder: '{{name}}IQK', + infiniteQueryOptionsNameBuilder: '{{name}}InfiniteQuery', + mutationOptionsNameBuilder: '{{name}}MutationOptions', + name: '@tanstack/react-query', + queryKeyNameBuilder: '{{name}}QK', + queryOptionsNameBuilder: '{{name}}Query', }, { // comments: false, diff --git a/packages/openapi-ts-tests/test/plugins.test.ts b/packages/openapi-ts-tests/test/plugins.test.ts index 1561f7d54..3ddaf7953 100644 --- a/packages/openapi-ts-tests/test/plugins.test.ts +++ b/packages/openapi-ts-tests/test/plugins.test.ts @@ -214,6 +214,106 @@ for (const version of versions) { description: 'generate Fetch API client with TanStack Vue Query plugin using class-based SDKs', }, + { + config: createConfig({ + input: 'sdk-instance.yaml', + output: 'name-builder', + plugins: [ + { + infiniteQueryKeyNameBuilder: '{{name}}A', + infiniteQueryOptionsNameBuilder: '{{name}}B', + mutationOptionsNameBuilder: '{{name}}C', + name: '@tanstack/angular-query-experimental', + queryKeyNameBuilder: '{{name}}D', + queryOptionsNameBuilder: '{{name}}E', + }, + '@hey-api/client-fetch', + '@hey-api/sdk', + ], + }), + description: + 'generate Fetch API client with TanStack Angular Query Experimental plugin with custom names', + }, + { + config: createConfig({ + input: 'sdk-instance.yaml', + output: 'name-builder', + plugins: [ + { + infiniteQueryKeyNameBuilder: '{{name}}A', + infiniteQueryOptionsNameBuilder: '{{name}}B', + mutationOptionsNameBuilder: '{{name}}C', + name: '@tanstack/react-query', + queryKeyNameBuilder: '{{name}}D', + queryOptionsNameBuilder: '{{name}}E', + }, + '@hey-api/client-fetch', + '@hey-api/sdk', + ], + }), + description: + 'generate Fetch API client with TanStack React Query plugin with custom names', + }, + { + config: createConfig({ + input: 'sdk-instance.yaml', + output: 'name-builder', + plugins: [ + { + infiniteQueryKeyNameBuilder: '{{name}}A', + infiniteQueryOptionsNameBuilder: '{{name}}B', + mutationOptionsNameBuilder: '{{name}}C', + name: '@tanstack/solid-query', + queryKeyNameBuilder: '{{name}}D', + queryOptionsNameBuilder: '{{name}}E', + }, + '@hey-api/client-fetch', + '@hey-api/sdk', + ], + }), + description: + 'generate Fetch API client with TanStack Solid Query plugin with custom names', + }, + { + config: createConfig({ + input: 'sdk-instance.yaml', + output: 'name-builder', + plugins: [ + { + infiniteQueryKeyNameBuilder: '{{name}}A', + infiniteQueryOptionsNameBuilder: '{{name}}B', + mutationOptionsNameBuilder: '{{name}}C', + name: '@tanstack/svelte-query', + queryKeyNameBuilder: '{{name}}D', + queryOptionsNameBuilder: '{{name}}E', + }, + '@hey-api/client-fetch', + '@hey-api/sdk', + ], + }), + description: + 'generate Fetch API client with TanStack Svelte Query plugin with custom names', + }, + { + config: createConfig({ + input: 'sdk-instance.yaml', + output: 'name-builder', + plugins: [ + { + infiniteQueryKeyNameBuilder: '{{name}}A', + infiniteQueryOptionsNameBuilder: '{{name}}B', + mutationOptionsNameBuilder: '{{name}}C', + name: '@tanstack/vue-query', + queryKeyNameBuilder: '{{name}}D', + queryOptionsNameBuilder: '{{name}}E', + }, + '@hey-api/client-fetch', + '@hey-api/sdk', + ], + }), + description: + 'generate Fetch API client with TanStack Vue Query plugin with custom names', + }, { config: createConfig({ output: 'default', diff --git a/packages/openapi-ts/src/generate/output.ts b/packages/openapi-ts/src/generate/output.ts index 47c5e13be..f2bb4335e 100644 --- a/packages/openapi-ts/src/generate/output.ts +++ b/packages/openapi-ts/src/generate/output.ts @@ -39,6 +39,7 @@ export const generateOutput = async ({ context }: { context: IR.Context }) => { context, plugin: plugin as never, }); + context.subscribe = _subscribe; } await parseIR({ context }); diff --git a/packages/openapi-ts/src/ir/pagination.ts b/packages/openapi-ts/src/ir/pagination.ts index ffcd201a8..2c8a41ee3 100644 --- a/packages/openapi-ts/src/ir/pagination.ts +++ b/packages/openapi-ts/src/ir/pagination.ts @@ -13,7 +13,7 @@ export const DEFAULT_PAGINATION_KEYWORDS = [ export function getPaginationKeywordsRegExp({ keywords = DEFAULT_PAGINATION_KEYWORDS, }: Config['input']['pagination'] = {}): RegExp { - if (keywords.length === 0) { + if (!keywords.length) { keywords = DEFAULT_PAGINATION_KEYWORDS; } const pattern = `^(${keywords.join('|')})$`; diff --git a/packages/openapi-ts/src/plugins/@tanstack/angular-query-experimental/config.ts b/packages/openapi-ts/src/plugins/@tanstack/angular-query-experimental/config.ts index 0159a3aa2..31ebfa507 100644 --- a/packages/openapi-ts/src/plugins/@tanstack/angular-query-experimental/config.ts +++ b/packages/openapi-ts/src/plugins/@tanstack/angular-query-experimental/config.ts @@ -9,11 +9,16 @@ export const defaultConfig: Plugin.Config = { _handlerLegacy: handlerLegacy, comments: true, exportFromIndex: false, + infiniteQueryKeyNameBuilder: '{{name}}InfiniteQueryKey', infiniteQueryOptions: true, + infiniteQueryOptionsNameBuilder: '{{name}}InfiniteOptions', mutationOptions: true, + mutationOptionsNameBuilder: '{{name}}Mutation', name: '@tanstack/angular-query-experimental', output: '@tanstack/angular-query-experimental', + queryKeyNameBuilder: '{{name}}QueryKey', queryOptions: true, + queryOptionsNameBuilder: '{{name}}Options', }; /** diff --git a/packages/openapi-ts/src/plugins/@tanstack/query-core/infiniteQueryOptions.ts b/packages/openapi-ts/src/plugins/@tanstack/query-core/infiniteQueryOptions.ts index 88a424eac..79ce3fd9f 100644 --- a/packages/openapi-ts/src/plugins/@tanstack/query-core/infiniteQueryOptions.ts +++ b/packages/openapi-ts/src/plugins/@tanstack/query-core/infiniteQueryOptions.ts @@ -14,7 +14,7 @@ import { import { createQueryKeyFunction, createQueryKeyType, - queryKeyFunctionIdentifier, + infiniteQueryKeyFunctionIdentifier, queryKeyName, queryKeyStatement, } from './queryKey'; @@ -223,15 +223,33 @@ const createInfiniteParamsFunction = ({ const infiniteQueryOptionsFunctionIdentifier = ({ context, operation, + plugin, }: { context: IR.Context; operation: IR.OperationObject; -}) => - `${serviceFunctionIdentifier({ + plugin: PluginInstance; +}) => { + const name = serviceFunctionIdentifier({ config: context.config, id: operation.id, operation, - })}InfiniteOptions`; + }); + + let customName = ''; + + if (plugin.infiniteQueryOptionsNameBuilder) { + if (typeof plugin.infiniteQueryOptionsNameBuilder === 'function') { + customName = plugin.infiniteQueryOptionsNameBuilder(name); + } else { + customName = plugin.infiniteQueryOptionsNameBuilder.replace( + '{{name}}', + name, + ); + } + } + + return customName; +}; export const createInfiniteQueryOptions = ({ context, @@ -322,10 +340,10 @@ export const createInfiniteQueryOptions = ({ }); file.add(node); - const infiniteQueryKeyName = queryKeyFunctionIdentifier({ + const infiniteQueryKeyName = infiniteQueryKeyFunctionIdentifier({ context, - isInfinite: true, operation, + plugin, }); const identifierQueryKey = file.identifier({ $ref: `#/queryKey/${infiniteQueryKeyName}`, @@ -504,6 +522,7 @@ export const createInfiniteQueryOptions = ({ name: infiniteQueryOptionsFunctionIdentifier({ context, operation, + plugin, }), }); file.add(statement); diff --git a/packages/openapi-ts/src/plugins/@tanstack/query-core/mutationOptions.ts b/packages/openapi-ts/src/plugins/@tanstack/query-core/mutationOptions.ts index 9a3557f0a..1952e2bd9 100644 --- a/packages/openapi-ts/src/plugins/@tanstack/query-core/mutationOptions.ts +++ b/packages/openapi-ts/src/plugins/@tanstack/query-core/mutationOptions.ts @@ -12,15 +12,30 @@ const mutationOptionsFn = 'mutationOptions'; const mutationOptionsFunctionIdentifier = ({ context, operation, + plugin, }: { context: IR.Context; operation: IR.OperationObject; -}) => - `${serviceFunctionIdentifier({ + plugin: PluginInstance; +}) => { + const name = serviceFunctionIdentifier({ config: context.config, id: operation.id, operation, - })}Mutation`; + }); + + let customName = ''; + + if (plugin.mutationOptionsNameBuilder) { + if (typeof plugin.mutationOptionsNameBuilder === 'function') { + customName = plugin.mutationOptionsNameBuilder(name); + } else { + customName = plugin.mutationOptionsNameBuilder.replace('{{name}}', name); + } + } + + return customName; +}; export const createMutationOptions = ({ context, @@ -157,7 +172,7 @@ export const createMutationOptions = ({ : undefined, exportConst: true, expression, - name: mutationOptionsFunctionIdentifier({ context, operation }), + name: mutationOptionsFunctionIdentifier({ context, operation, plugin }), }); file.add(statement); diff --git a/packages/openapi-ts/src/plugins/@tanstack/query-core/queryKey.ts b/packages/openapi-ts/src/plugins/@tanstack/query-core/queryKey.ts index ab3e7e526..32b96ec17 100644 --- a/packages/openapi-ts/src/plugins/@tanstack/query-core/queryKey.ts +++ b/packages/openapi-ts/src/plugins/@tanstack/query-core/queryKey.ts @@ -298,20 +298,61 @@ export const createQueryKeyType = ({ file.add(queryKeyType); }; +export const infiniteQueryKeyFunctionIdentifier = ({ + context, + operation, + plugin, +}: { + context: IR.Context; + operation: IR.OperationObject; + plugin: PluginInstance; +}) => { + const name = serviceFunctionIdentifier({ + config: context.config, + id: operation.id, + operation, + }); + + let customName = ''; + + if (plugin.infiniteQueryKeyNameBuilder) { + if (typeof plugin.infiniteQueryKeyNameBuilder === 'function') { + customName = plugin.infiniteQueryKeyNameBuilder(name); + } else { + customName = plugin.infiniteQueryKeyNameBuilder.replace('{{name}}', name); + } + } + + return customName; +}; + export const queryKeyFunctionIdentifier = ({ context, - isInfinite, operation, + plugin, }: { context: IR.Context; - isInfinite?: boolean; operation: IR.OperationObject; -}) => - `${serviceFunctionIdentifier({ + plugin: PluginInstance; +}) => { + const name = serviceFunctionIdentifier({ config: context.config, id: operation.id, operation, - })}${isInfinite ? 'Infinite' : ''}QueryKey`; + }); + + let customName = ''; + + if (plugin.queryKeyNameBuilder) { + if (typeof plugin.queryKeyNameBuilder === 'function') { + customName = plugin.queryKeyNameBuilder(name); + } else { + customName = plugin.queryKeyNameBuilder.replace('{{name}}', name); + } + } + + return customName; +}; export const queryKeyStatement = ({ context, @@ -328,11 +369,9 @@ export const queryKeyStatement = ({ }) => { const file = context.file({ id: plugin.name })!; const typeData = useTypeData({ context, operation, plugin }); - const name = queryKeyFunctionIdentifier({ - context, - isInfinite, - operation, - }); + const name = isInfinite + ? infiniteQueryKeyFunctionIdentifier({ context, operation, plugin }) + : queryKeyFunctionIdentifier({ context, operation, plugin }); const identifierQueryKey = file.identifier({ $ref: `#/queryKey/${name}`, create: true, diff --git a/packages/openapi-ts/src/plugins/@tanstack/query-core/queryOptions.ts b/packages/openapi-ts/src/plugins/@tanstack/query-core/queryOptions.ts index 3ff480bba..13a723c8a 100644 --- a/packages/openapi-ts/src/plugins/@tanstack/query-core/queryOptions.ts +++ b/packages/openapi-ts/src/plugins/@tanstack/query-core/queryOptions.ts @@ -21,15 +21,30 @@ const queryOptionsFn = 'queryOptions'; const queryOptionsFunctionIdentifier = ({ context, operation, + plugin, }: { context: IR.Context; operation: IR.OperationObject; -}) => - `${serviceFunctionIdentifier({ + plugin: PluginInstance; +}) => { + const name = serviceFunctionIdentifier({ config: context.config, id: operation.id, operation, - })}Options`; + }); + + let customName = ''; + + if (plugin.queryOptionsNameBuilder) { + if (typeof plugin.queryOptionsNameBuilder === 'function') { + customName = plugin.queryOptionsNameBuilder(name); + } else { + customName = plugin.queryOptionsNameBuilder.replace('{{name}}', name); + } + } + + return customName; +}; export const createQueryOptions = ({ context, @@ -83,8 +98,8 @@ export const createQueryOptions = ({ const queryKeyName = queryKeyFunctionIdentifier({ context, - isInfinite: false, operation, + plugin, }); const identifierQueryKey = file.identifier({ $ref: `#/queryKey/${queryKeyName}`, @@ -194,7 +209,7 @@ export const createQueryOptions = ({ }), ], }), - name: queryOptionsFunctionIdentifier({ context, operation }), + name: queryOptionsFunctionIdentifier({ context, operation, plugin }), // TODO: add type error // TODO: AxiosError }); diff --git a/packages/openapi-ts/src/plugins/@tanstack/query-core/types.d.ts b/packages/openapi-ts/src/plugins/@tanstack/query-core/types.d.ts index 036e35d0a..0ecffd047 100644 --- a/packages/openapi-ts/src/plugins/@tanstack/query-core/types.d.ts +++ b/packages/openapi-ts/src/plugins/@tanstack/query-core/types.d.ts @@ -54,5 +54,40 @@ export namespace TanStackQuery { * @default false */ exportFromIndex?: boolean; + /** + * Customize the generated infinite query key names. The name variable is + * obtained from the SDK function name. + * + * @default '{{name}}InfiniteQueryKey' + */ + infiniteQueryKeyNameBuilder?: string | ((name: string) => string); + /** + * Customize the generated infinite query options names. The name variable + * is obtained from the SDK function name. + * + * @default '{{name}}InfiniteOptions' + */ + infiniteQueryOptionsNameBuilder?: string | ((name: string) => string); + /** + * Customize the generated mutation options names. The name variable is + * obtained from the SDK function name. + * + * @default '{{name}}Mutation' + */ + mutationOptionsNameBuilder?: string | ((name: string) => string); + /** + * Customize the generated query key names. The name variable is obtained + * from the SDK function name. + * + * @default '{{name}}QueryKey' + */ + queryKeyNameBuilder?: string | ((name: string) => string); + /** + * Customize the generated query options names. The name variable is + * obtained from the SDK function name. + * + * @default '{{name}}Options' + */ + queryOptionsNameBuilder?: string | ((name: string) => string); }; } diff --git a/packages/openapi-ts/src/plugins/@tanstack/react-query/config.ts b/packages/openapi-ts/src/plugins/@tanstack/react-query/config.ts index 0a38ed7f8..d518d8a4b 100644 --- a/packages/openapi-ts/src/plugins/@tanstack/react-query/config.ts +++ b/packages/openapi-ts/src/plugins/@tanstack/react-query/config.ts @@ -9,11 +9,16 @@ export const defaultConfig: Plugin.Config = { _handlerLegacy: handlerLegacy, comments: true, exportFromIndex: false, + infiniteQueryKeyNameBuilder: '{{name}}InfiniteQueryKey', infiniteQueryOptions: true, + infiniteQueryOptionsNameBuilder: '{{name}}InfiniteOptions', mutationOptions: true, + mutationOptionsNameBuilder: '{{name}}Mutation', name: '@tanstack/react-query', output: '@tanstack/react-query', + queryKeyNameBuilder: '{{name}}QueryKey', queryOptions: true, + queryOptionsNameBuilder: '{{name}}Options', }; /** diff --git a/packages/openapi-ts/src/plugins/@tanstack/solid-query/config.ts b/packages/openapi-ts/src/plugins/@tanstack/solid-query/config.ts index 2f4c4757f..a38d20b57 100644 --- a/packages/openapi-ts/src/plugins/@tanstack/solid-query/config.ts +++ b/packages/openapi-ts/src/plugins/@tanstack/solid-query/config.ts @@ -9,11 +9,16 @@ export const defaultConfig: Plugin.Config = { _handlerLegacy: handlerLegacy, comments: true, exportFromIndex: false, + infiniteQueryKeyNameBuilder: '{{name}}InfiniteQueryKey', infiniteQueryOptions: true, + infiniteQueryOptionsNameBuilder: '{{name}}InfiniteOptions', mutationOptions: true, + mutationOptionsNameBuilder: '{{name}}Mutation', name: '@tanstack/solid-query', output: '@tanstack/solid-query', + queryKeyNameBuilder: '{{name}}QueryKey', queryOptions: true, + queryOptionsNameBuilder: '{{name}}Options', }; /** diff --git a/packages/openapi-ts/src/plugins/@tanstack/svelte-query/config.ts b/packages/openapi-ts/src/plugins/@tanstack/svelte-query/config.ts index 56763cdd9..a49f737d4 100644 --- a/packages/openapi-ts/src/plugins/@tanstack/svelte-query/config.ts +++ b/packages/openapi-ts/src/plugins/@tanstack/svelte-query/config.ts @@ -9,11 +9,16 @@ export const defaultConfig: Plugin.Config = { _handlerLegacy: handlerLegacy, comments: true, exportFromIndex: false, + infiniteQueryKeyNameBuilder: '{{name}}InfiniteQueryKey', infiniteQueryOptions: true, + infiniteQueryOptionsNameBuilder: '{{name}}InfiniteOptions', mutationOptions: true, + mutationOptionsNameBuilder: '{{name}}Mutation', name: '@tanstack/svelte-query', output: '@tanstack/svelte-query', + queryKeyNameBuilder: '{{name}}QueryKey', queryOptions: true, + queryOptionsNameBuilder: '{{name}}Options', }; /** diff --git a/packages/openapi-ts/src/plugins/@tanstack/vue-query/config.ts b/packages/openapi-ts/src/plugins/@tanstack/vue-query/config.ts index ce82f1b60..4e8ad48f9 100644 --- a/packages/openapi-ts/src/plugins/@tanstack/vue-query/config.ts +++ b/packages/openapi-ts/src/plugins/@tanstack/vue-query/config.ts @@ -9,11 +9,16 @@ export const defaultConfig: Plugin.Config = { _handlerLegacy: handlerLegacy, comments: true, exportFromIndex: false, + infiniteQueryKeyNameBuilder: '{{name}}InfiniteQueryKey', infiniteQueryOptions: true, + infiniteQueryOptionsNameBuilder: '{{name}}InfiniteOptions', mutationOptions: true, + mutationOptionsNameBuilder: '{{name}}Mutation', name: '@tanstack/vue-query', output: '@tanstack/vue-query', + queryKeyNameBuilder: '{{name}}QueryKey', queryOptions: true, + queryOptionsNameBuilder: '{{name}}Options', }; /** -- 2.51.2