From a09bd9a73befff74d7b3635f6a54bf844e974f66 Mon Sep 17 00:00:00 2001 From: liangsky <640634387@qq.com> Date: Wed, 14 Aug 2024 21:22:50 +0800 Subject: [PATCH 1/5] fix: keyedParameters use unique key --- .../src/transform/path-item-object.ts | 3 +- .../test/transform/path-item-object.test.ts | 60 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/packages/openapi-typescript/src/transform/path-item-object.ts b/packages/openapi-typescript/src/transform/path-item-object.ts index 04aca3cd3..a208a0b17 100644 --- a/packages/openapi-typescript/src/transform/path-item-object.ts +++ b/packages/openapi-typescript/src/transform/path-item-object.ts @@ -53,7 +53,8 @@ export default function transformPathItemObject(pathItem: PathItemObject, option if (!("$ref" in operationObject)) { // important: OperationObject parameters come last, and will override any conflicts with PathItem parameters for (const parameter of [...(pathItem.parameters ?? []), ...(operationObject.parameters ?? [])]) { - const name = "$ref" in parameter ? options.ctx.resolve(parameter.$ref)?.name : parameter.name; + // fix: #1798, use unique key + const name = "$ref" in parameter ? options.ctx.resolve(parameter.$ref)?.name : `${parameter.in}-${parameter.name}`; if (name) { keyedParameters[name] = parameter; } diff --git a/packages/openapi-typescript/test/transform/path-item-object.test.ts b/packages/openapi-typescript/test/transform/path-item-object.test.ts index ed0e697e3..3938decd5 100644 --- a/packages/openapi-typescript/test/transform/path-item-object.test.ts +++ b/packages/openapi-typescript/test/transform/path-item-object.test.ts @@ -359,6 +359,66 @@ describe("transformPathItemObject", () => { }, }, ], + [ + "parameters > header and cookie have same name param1", + { + given: { + get: { + parameters: [ + { + "name": "param1", + "in": "header", + "required": true, + "schema": { + "type": "string" + }, + "description": "param1" + }, + { + "name": "param1", + "in": "cookie", + "required": true, + "schema": { + "type": "string" + }, + "description": "param1" + } + ] + }, + }, + want: `{ + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header: { + /** @description param1 */ + param1: string; + }; + path?: never; + cookie: { + /** @description param1 */ + param1: string; + }; + }; + requestBody?: never; + responses: never; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; +}`, + }, + ], ]; for (const [testName, { given, want, options = DEFAULT_OPTIONS, ci }] of tests) { From 7d4f1b3f7fe882485eadfc51e190a7f5cab32c20 Mon Sep 17 00:00:00 2001 From: liangsky <640634387@qq.com> Date: Wed, 14 Aug 2024 21:28:59 +0800 Subject: [PATCH 2/5] chore: lint format --- .../test/transform/path-item-object.test.ts | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/packages/openapi-typescript/test/transform/path-item-object.test.ts b/packages/openapi-typescript/test/transform/path-item-object.test.ts index 3938decd5..86258d1a9 100644 --- a/packages/openapi-typescript/test/transform/path-item-object.test.ts +++ b/packages/openapi-typescript/test/transform/path-item-object.test.ts @@ -366,24 +366,24 @@ describe("transformPathItemObject", () => { get: { parameters: [ { - "name": "param1", - "in": "header", - "required": true, - "schema": { - "type": "string" + name: "param1", + in: "header", + required: true, + schema: { + type: "string", }, - "description": "param1" + description: "param1", }, { - "name": "param1", - "in": "cookie", - "required": true, - "schema": { - "type": "string" + name: "param1", + in: "cookie", + required: true, + schema: { + type: "string", }, - "description": "param1" - } - ] + description: "param1", + }, + ], }, }, want: `{ @@ -421,7 +421,10 @@ describe("transformPathItemObject", () => { ], ]; - for (const [testName, { given, want, options = DEFAULT_OPTIONS, ci }] of tests) { + for (const [ + testName, + { given, want, options = DEFAULT_OPTIONS, ci }, + ] of tests) { test.skipIf(ci?.skipIf)( testName, async () => { From ff8718bf3c3cc9602e00c70240da31e662645202 Mon Sep 17 00:00:00 2001 From: liangsky <640634387@qq.com> Date: Wed, 14 Aug 2024 21:30:37 +0800 Subject: [PATCH 3/5] chore: lint format --- .../test/transform/path-item-object.test.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/openapi-typescript/test/transform/path-item-object.test.ts b/packages/openapi-typescript/test/transform/path-item-object.test.ts index 86258d1a9..1b3efea95 100644 --- a/packages/openapi-typescript/test/transform/path-item-object.test.ts +++ b/packages/openapi-typescript/test/transform/path-item-object.test.ts @@ -421,10 +421,7 @@ describe("transformPathItemObject", () => { ], ]; - for (const [ - testName, - { given, want, options = DEFAULT_OPTIONS, ci }, - ] of tests) { + for (const [testName, { given, want, options = DEFAULT_OPTIONS, ci }] of tests) { test.skipIf(ci?.skipIf)( testName, async () => { From 8004a85d8159356fd8e3c8e5edf35bae844a511c Mon Sep 17 00:00:00 2001 From: liangsky <640634387@qq.com> Date: Fri, 23 Aug 2024 22:21:31 +0800 Subject: [PATCH 4/5] fix: ref also use unique key --- .../openapi-typescript/src/transform/path-item-object.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/openapi-typescript/src/transform/path-item-object.ts b/packages/openapi-typescript/src/transform/path-item-object.ts index a208a0b17..c57129893 100644 --- a/packages/openapi-typescript/src/transform/path-item-object.ts +++ b/packages/openapi-typescript/src/transform/path-item-object.ts @@ -54,7 +54,10 @@ export default function transformPathItemObject(pathItem: PathItemObject, option // important: OperationObject parameters come last, and will override any conflicts with PathItem parameters for (const parameter of [...(pathItem.parameters ?? []), ...(operationObject.parameters ?? [])]) { // fix: #1798, use unique key - const name = "$ref" in parameter ? options.ctx.resolve(parameter.$ref)?.name : `${parameter.in}-${parameter.name}`; + const name = + "$ref" in parameter + ? `${options.ctx.resolve(parameter.$ref)?.in}-${options.ctx.resolve(parameter.$ref)?.name}` + : `${parameter.in}-${parameter.name}`; if (name) { keyedParameters[name] = parameter; } From e63d90abb5accfe9671bc19d4c755bf1d6852b6e Mon Sep 17 00:00:00 2001 From: liangsky <31531283+liangskyli@users.noreply.github.com> Date: Thu, 29 Aug 2024 22:37:06 +0800 Subject: [PATCH 5/5] Create proud-pugs-clean.md fix: keyedParameters use unique key --- .changeset/proud-pugs-clean.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/proud-pugs-clean.md diff --git a/.changeset/proud-pugs-clean.md b/.changeset/proud-pugs-clean.md new file mode 100644 index 000000000..4d27faecb --- /dev/null +++ b/.changeset/proud-pugs-clean.md @@ -0,0 +1,5 @@ +--- +"openapi-typescript": patch +--- + +fix: keyedParameters use unique key