Skip to content

Commit a09bd9a

Browse files
committed
fix: keyedParameters use unique key
1 parent 7f0a391 commit a09bd9a

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

packages/openapi-typescript/src/transform/path-item-object.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ export default function transformPathItemObject(pathItem: PathItemObject, option
5353
if (!("$ref" in operationObject)) {
5454
// important: OperationObject parameters come last, and will override any conflicts with PathItem parameters
5555
for (const parameter of [...(pathItem.parameters ?? []), ...(operationObject.parameters ?? [])]) {
56-
const name = "$ref" in parameter ? options.ctx.resolve<ParameterObject>(parameter.$ref)?.name : parameter.name;
56+
// fix: #1798, use unique key
57+
const name = "$ref" in parameter ? options.ctx.resolve<ParameterObject>(parameter.$ref)?.name : `${parameter.in}-${parameter.name}`;
5758
if (name) {
5859
keyedParameters[name] = parameter;
5960
}

packages/openapi-typescript/test/transform/path-item-object.test.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,66 @@ describe("transformPathItemObject", () => {
359359
},
360360
},
361361
],
362+
[
363+
"parameters > header and cookie have same name param1",
364+
{
365+
given: {
366+
get: {
367+
parameters: [
368+
{
369+
"name": "param1",
370+
"in": "header",
371+
"required": true,
372+
"schema": {
373+
"type": "string"
374+
},
375+
"description": "param1"
376+
},
377+
{
378+
"name": "param1",
379+
"in": "cookie",
380+
"required": true,
381+
"schema": {
382+
"type": "string"
383+
},
384+
"description": "param1"
385+
}
386+
]
387+
},
388+
},
389+
want: `{
390+
parameters: {
391+
query?: never;
392+
header?: never;
393+
path?: never;
394+
cookie?: never;
395+
};
396+
get: {
397+
parameters: {
398+
query?: never;
399+
header: {
400+
/** @description param1 */
401+
param1: string;
402+
};
403+
path?: never;
404+
cookie: {
405+
/** @description param1 */
406+
param1: string;
407+
};
408+
};
409+
requestBody?: never;
410+
responses: never;
411+
};
412+
put?: never;
413+
post?: never;
414+
delete?: never;
415+
options?: never;
416+
head?: never;
417+
patch?: never;
418+
trace?: never;
419+
}`,
420+
},
421+
],
362422
];
363423

364424
for (const [testName, { given, want, options = DEFAULT_OPTIONS, ci }] of tests) {

0 commit comments

Comments
 (0)