Skip to content

Commit 08bde72

Browse files
authored
fix: keyedParameters use unique key (#1849)
* fix: keyedParameters use unique key * chore: lint format * chore: lint format * fix: ref also use unique key * Create proud-pugs-clean.md fix: keyedParameters use unique key
1 parent a76ff59 commit 08bde72

File tree

3 files changed

+70
-1
lines changed

3 files changed

+70
-1
lines changed

.changeset/proud-pugs-clean.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"openapi-typescript": patch
3+
---
4+
5+
fix: keyedParameters use unique key

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ 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 =
58+
"$ref" in parameter
59+
? `${options.ctx.resolve<ParameterObject>(parameter.$ref)?.in}-${options.ctx.resolve<ParameterObject>(parameter.$ref)?.name}`
60+
: `${parameter.in}-${parameter.name}`;
5761
if (name) {
5862
keyedParameters[name] = parameter;
5963
}

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

+60
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)