Skip to content

Commit f82d9ab

Browse files
authored
Merge pull request #1990 from hey-api/fix/operation-id-duplicate
ix: avoid generating duplicate operation ids when sanitizing input
2 parents 6d0e069 + 2fb1689 commit f82d9ab

File tree

23 files changed

+354
-84
lines changed

23 files changed

+354
-84
lines changed

.changeset/hot-deers-jam.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@hey-api/openapi-ts': patch
3+
---
4+
5+
fix: avoid generating duplicate operation ids when sanitizing input

packages/openapi-ts-tests/test/__snapshots__/3.0.x/internal-name-conflict/@tanstack/react-query.gen.ts

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

3-
import { type Options, create } from '../sdk.gen';
3+
import { type Options, create, create2, create3 } from '../sdk.gen';
44
import { queryOptions, type UseMutationOptions, type DefaultError } from '@tanstack/react-query';
5-
import type { CreateData } from '../types.gen';
5+
import type { CreateData, Create2Data, Create3Data } from '../types.gen';
66
import { client as _heyApiClient } from '../client.gen';
77

88
export type QueryKey<TOptions extends Options> = [
@@ -53,10 +53,41 @@ export const createOptions = (options?: Options<CreateData>) => {
5353
});
5454
};
5555

56-
export const createMutation = (options?: Partial<Options<CreateData>>): UseMutationOptions<unknown, DefaultError, Options<CreateData>> => {
57-
const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<CreateData>> = {
56+
export const create2Mutation = (options?: Partial<Options<Create2Data>>): UseMutationOptions<unknown, DefaultError, Options<Create2Data>> => {
57+
const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<Create2Data>> = {
5858
mutationFn: async (localOptions) => {
59-
const { data } = await create({
59+
const { data } = await create2({
60+
...options,
61+
...localOptions,
62+
throwOnError: true
63+
});
64+
return data;
65+
}
66+
};
67+
return mutationOptions;
68+
};
69+
70+
export const create3QueryKey = (options?: Options<Create3Data>) => createQueryKey('create3', options);
71+
72+
export const create3Options = (options?: Options<Create3Data>) => {
73+
return queryOptions({
74+
queryFn: async ({ queryKey, signal }) => {
75+
const { data } = await create3({
76+
...options,
77+
...queryKey[0],
78+
signal,
79+
throwOnError: true
80+
});
81+
return data;
82+
},
83+
queryKey: create3QueryKey(options)
84+
});
85+
};
86+
87+
export const create3Mutation = (options?: Partial<Options<Create3Data>>): UseMutationOptions<unknown, DefaultError, Options<Create3Data>> => {
88+
const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<Create3Data>> = {
89+
mutationFn: async (localOptions) => {
90+
const { data } = await create3({
6091
...options,
6192
...localOptions,
6293
throwOnError: true

packages/openapi-ts-tests/test/__snapshots__/3.0.x/internal-name-conflict/sdk.gen.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// This file is auto-generated by @hey-api/openapi-ts
22

33
import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch';
4-
import type { CreateData } from './types.gen';
4+
import type { CreateData, Create2Data, Create3Data } from './types.gen';
55
import { client as _heyApiClient } from './client.gen';
66

77
export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = ClientOptions<TData, ThrowOnError> & {
@@ -19,6 +19,20 @@ export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends
1919
};
2020

2121
export const create = <ThrowOnError extends boolean = false>(options?: Options<CreateData, ThrowOnError>) => {
22+
return (options?.client ?? _heyApiClient).get<unknown, unknown, ThrowOnError>({
23+
url: '/foo',
24+
...options
25+
});
26+
};
27+
28+
export const create2 = <ThrowOnError extends boolean = false>(options?: Options<Create2Data, ThrowOnError>) => {
29+
return (options?.client ?? _heyApiClient).patch<unknown, unknown, ThrowOnError>({
30+
url: '/foo',
31+
...options
32+
});
33+
};
34+
35+
export const create3 = <ThrowOnError extends boolean = false>(options?: Options<Create3Data, ThrowOnError>) => {
2236
return (options?.client ?? _heyApiClient).post<unknown, unknown, ThrowOnError>({
2337
url: '/foo',
2438
...options

packages/openapi-ts-tests/test/__snapshots__/3.0.x/internal-name-conflict/types.gen.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,34 @@ export type CreateResponses = {
1414
200: unknown;
1515
};
1616

17+
export type Create2Data = {
18+
body?: never;
19+
path?: never;
20+
query?: never;
21+
url: '/foo';
22+
};
23+
24+
export type Create2Responses = {
25+
/**
26+
* OK
27+
*/
28+
200: unknown;
29+
};
30+
31+
export type Create3Data = {
32+
body?: never;
33+
path?: never;
34+
query?: never;
35+
url: '/foo';
36+
};
37+
38+
export type Create3Responses = {
39+
/**
40+
* OK
41+
*/
42+
200: unknown;
43+
};
44+
1745
export type ClientOptions = {
1846
baseUrl: `${string}://${string}` | (string & {});
1947
};

packages/openapi-ts-tests/test/__snapshots__/3.1.x/internal-name-conflict/@tanstack/react-query.gen.ts

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

3-
import { type Options, create } from '../sdk.gen';
3+
import { type Options, create, create2, create3 } from '../sdk.gen';
44
import { queryOptions, type UseMutationOptions, type DefaultError } from '@tanstack/react-query';
5-
import type { CreateData } from '../types.gen';
5+
import type { CreateData, Create2Data, Create3Data } from '../types.gen';
66
import { client as _heyApiClient } from '../client.gen';
77

88
export type QueryKey<TOptions extends Options> = [
@@ -53,10 +53,41 @@ export const createOptions = (options?: Options<CreateData>) => {
5353
});
5454
};
5555

56-
export const createMutation = (options?: Partial<Options<CreateData>>): UseMutationOptions<unknown, DefaultError, Options<CreateData>> => {
57-
const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<CreateData>> = {
56+
export const create2Mutation = (options?: Partial<Options<Create2Data>>): UseMutationOptions<unknown, DefaultError, Options<Create2Data>> => {
57+
const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<Create2Data>> = {
5858
mutationFn: async (localOptions) => {
59-
const { data } = await create({
59+
const { data } = await create2({
60+
...options,
61+
...localOptions,
62+
throwOnError: true
63+
});
64+
return data;
65+
}
66+
};
67+
return mutationOptions;
68+
};
69+
70+
export const create3QueryKey = (options?: Options<Create3Data>) => createQueryKey('create3', options);
71+
72+
export const create3Options = (options?: Options<Create3Data>) => {
73+
return queryOptions({
74+
queryFn: async ({ queryKey, signal }) => {
75+
const { data } = await create3({
76+
...options,
77+
...queryKey[0],
78+
signal,
79+
throwOnError: true
80+
});
81+
return data;
82+
},
83+
queryKey: create3QueryKey(options)
84+
});
85+
};
86+
87+
export const create3Mutation = (options?: Partial<Options<Create3Data>>): UseMutationOptions<unknown, DefaultError, Options<Create3Data>> => {
88+
const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<Create3Data>> = {
89+
mutationFn: async (localOptions) => {
90+
const { data } = await create3({
6091
...options,
6192
...localOptions,
6293
throwOnError: true

packages/openapi-ts-tests/test/__snapshots__/3.1.x/internal-name-conflict/sdk.gen.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// This file is auto-generated by @hey-api/openapi-ts
22

33
import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch';
4-
import type { CreateData } from './types.gen';
4+
import type { CreateData, Create2Data, Create3Data } from './types.gen';
55
import { client as _heyApiClient } from './client.gen';
66

77
export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = ClientOptions<TData, ThrowOnError> & {
@@ -19,6 +19,20 @@ export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends
1919
};
2020

2121
export const create = <ThrowOnError extends boolean = false>(options?: Options<CreateData, ThrowOnError>) => {
22+
return (options?.client ?? _heyApiClient).get<unknown, unknown, ThrowOnError>({
23+
url: '/foo',
24+
...options
25+
});
26+
};
27+
28+
export const create2 = <ThrowOnError extends boolean = false>(options?: Options<Create2Data, ThrowOnError>) => {
29+
return (options?.client ?? _heyApiClient).patch<unknown, unknown, ThrowOnError>({
30+
url: '/foo',
31+
...options
32+
});
33+
};
34+
35+
export const create3 = <ThrowOnError extends boolean = false>(options?: Options<Create3Data, ThrowOnError>) => {
2236
return (options?.client ?? _heyApiClient).post<unknown, unknown, ThrowOnError>({
2337
url: '/foo',
2438
...options

packages/openapi-ts-tests/test/__snapshots__/3.1.x/internal-name-conflict/types.gen.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,34 @@ export type CreateResponses = {
1414
200: unknown;
1515
};
1616

17+
export type Create2Data = {
18+
body?: never;
19+
path?: never;
20+
query?: never;
21+
url: '/foo';
22+
};
23+
24+
export type Create2Responses = {
25+
/**
26+
* OK
27+
*/
28+
200: unknown;
29+
};
30+
31+
export type Create3Data = {
32+
body?: never;
33+
path?: never;
34+
query?: never;
35+
url: '/foo';
36+
};
37+
38+
export type Create3Responses = {
39+
/**
40+
* OK
41+
*/
42+
200: unknown;
43+
};
44+
1745
export type ClientOptions = {
1846
baseUrl: `${string}://${string}` | (string & {});
1947
};

packages/openapi-ts-tests/test/__snapshots__/test/generated/v3-types-PascalCase/types.gen.ts.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,21 +1428,21 @@ export type DuplicateNameData = {
14281428
url: '/api/v{api-version}/duplicate';
14291429
};
14301430

1431-
export type DuplicateNameData = {
1431+
export type DuplicateName2Data = {
14321432
body?: never;
14331433
path?: never;
14341434
query?: never;
14351435
url: '/api/v{api-version}/duplicate';
14361436
};
14371437

1438-
export type DuplicateNameData = {
1438+
export type DuplicateName3Data = {
14391439
body?: never;
14401440
path?: never;
14411441
query?: never;
14421442
url: '/api/v{api-version}/duplicate';
14431443
};
14441444

1445-
export type DuplicateNameData = {
1445+
export type DuplicateName4Data = {
14461446
body?: never;
14471447
path?: never;
14481448
query?: never;

packages/openapi-ts-tests/test/__snapshots__/test/generated/v3_no_index/types.gen.ts.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,21 +1428,21 @@ export type DuplicateNameData = {
14281428
url: '/api/v{api-version}/duplicate';
14291429
};
14301430

1431-
export type DuplicateNameData = {
1431+
export type DuplicateName2Data = {
14321432
body?: never;
14331433
path?: never;
14341434
query?: never;
14351435
url: '/api/v{api-version}/duplicate';
14361436
};
14371437

1438-
export type DuplicateNameData = {
1438+
export type DuplicateName3Data = {
14391439
body?: never;
14401440
path?: never;
14411441
query?: never;
14421442
url: '/api/v{api-version}/duplicate';
14431443
};
14441444

1445-
export type DuplicateNameData = {
1445+
export type DuplicateName4Data = {
14461446
body?: never;
14471447
path?: never;
14481448
query?: never;

packages/openapi-ts-tests/test/__snapshots__/test/generated/v3_types/types.gen.ts.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,21 +1428,21 @@ export type DuplicateNameData = {
14281428
url: '/api/v{api-version}/duplicate';
14291429
};
14301430

1431-
export type DuplicateNameData = {
1431+
export type DuplicateName2Data = {
14321432
body?: never;
14331433
path?: never;
14341434
query?: never;
14351435
url: '/api/v{api-version}/duplicate';
14361436
};
14371437

1438-
export type DuplicateNameData = {
1438+
export type DuplicateName3Data = {
14391439
body?: never;
14401440
path?: never;
14411441
query?: never;
14421442
url: '/api/v{api-version}/duplicate';
14431443
};
14441444

1445-
export type DuplicateNameData = {
1445+
export type DuplicateName4Data = {
14461446
body?: never;
14471447
path?: never;
14481448
query?: never;

0 commit comments

Comments
 (0)