diff --git a/integration-tests-definitions/todo-lists.yaml b/integration-tests-definitions/todo-lists.yaml index 7bc1f10b4..6146e6e8b 100644 --- a/integration-tests-definitions/todo-lists.yaml +++ b/integration-tests-definitions/todo-lists.yaml @@ -198,6 +198,7 @@ paths: parameters: - name: id in: path + required: true schema: type: string put: diff --git a/integration-tests/typescript-express/src/generated/todo-lists.yaml/generated.ts b/integration-tests/typescript-express/src/generated/todo-lists.yaml/generated.ts index 6b508e4f3..9c68b8cbf 100644 --- a/integration-tests/typescript-express/src/generated/todo-lists.yaml/generated.ts +++ b/integration-tests/typescript-express/src/generated/todo-lists.yaml/generated.ts @@ -607,7 +607,7 @@ export function createRouter( }, ) - const replaceAttachmentParamSchema = z.object({id: z.string().optional()}) + const replaceAttachmentParamSchema = z.object({id: z.string()}) const replaceAttachmentResponseBodyValidator = responseValidationFactory( [["202", z.undefined()]], diff --git a/integration-tests/typescript-express/src/generated/todo-lists.yaml/models.ts b/integration-tests/typescript-express/src/generated/todo-lists.yaml/models.ts index 3b6579785..b52e29b1b 100644 --- a/integration-tests/typescript-express/src/generated/todo-lists.yaml/models.ts +++ b/integration-tests/typescript-express/src/generated/todo-lists.yaml/models.ts @@ -53,7 +53,7 @@ export type t_GetTodoListsQuerySchema = { } export type t_ReplaceAttachmentParamSchema = { - id?: string | undefined + id: string } export type t_UpdateTodoListByIdParamSchema = { diff --git a/integration-tests/typescript-koa/src/generated/todo-lists.yaml/generated.ts b/integration-tests/typescript-koa/src/generated/todo-lists.yaml/generated.ts index 31ab76033..9a4caefa9 100644 --- a/integration-tests/typescript-koa/src/generated/todo-lists.yaml/generated.ts +++ b/integration-tests/typescript-koa/src/generated/todo-lists.yaml/generated.ts @@ -564,7 +564,7 @@ export function createRouter( .then(handleResponse(ctx, uploadAttachmentResponseValidator)) }) - const replaceAttachmentParamSchema = z.object({id: z.string().optional()}) + const replaceAttachmentParamSchema = z.object({id: z.string()}) const replaceAttachmentResponseValidator = responseValidationFactory( [["202", z.undefined()]], diff --git a/integration-tests/typescript-koa/src/generated/todo-lists.yaml/models.ts b/integration-tests/typescript-koa/src/generated/todo-lists.yaml/models.ts index 724d4ac33..8633abcde 100644 --- a/integration-tests/typescript-koa/src/generated/todo-lists.yaml/models.ts +++ b/integration-tests/typescript-koa/src/generated/todo-lists.yaml/models.ts @@ -53,7 +53,7 @@ export type t_GetTodoListsQuerySchema = { } export type t_ReplaceAttachmentParamSchema = { - id?: string + id: string } export type t_UpdateTodoListByIdParamSchema = { diff --git a/packages/openapi-code-generator/src/core/normalization/parameter-normalizer.spec.ts b/packages/openapi-code-generator/src/core/normalization/parameter-normalizer.spec.ts index c7aed5d00..1f3166c05 100644 --- a/packages/openapi-code-generator/src/core/normalization/parameter-normalizer.spec.ts +++ b/packages/openapi-code-generator/src/core/normalization/parameter-normalizer.spec.ts @@ -102,6 +102,19 @@ describe("ParameterNormalizer", () => { }), ).toThrow("unsupported parameter style: 'form' for in: 'path'") }) + + it("forces required=true", () => { + expect( + parameterNormalizer.normalizeParameter({ + name: "id", + in: "path", + required: false, + schema: {type: "string"}, + }), + ).toStrictEqual( + ir.pathParameter({style: "simple", explode: false, required: true}), + ) + }) }) describe("query parameters", () => { diff --git a/packages/openapi-code-generator/src/core/normalization/parameter-normalizer.ts b/packages/openapi-code-generator/src/core/normalization/parameter-normalizer.ts index 8d0962ba8..befa35d1d 100644 --- a/packages/openapi-code-generator/src/core/normalization/parameter-normalizer.ts +++ b/packages/openapi-code-generator/src/core/normalization/parameter-normalizer.ts @@ -117,7 +117,7 @@ export class ParameterNormalizer { properties[parameter.name] = schema - if (parameter.required) { + if (parameter.required || parameter.in === "path") { required.push(parameter.name) } }