Skip to content

[BUG][typescript][typescript-angular] enumSuffix appends to modelNameSuffix #5135

@amakhrov

Description

@amakhrov

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • What's the version of OpenAPI Generator used?
  • Have you search for related issues/PRs?
  • What's the actual output vs expected output?
Description
  1. [all typescript generators] When modelNameSuffix option is provided, generated enum names concatenate this with enumSuffix, resulting in smth like BaseNameModelSuffixEnum.
  2. [typescript-angular] A custom option modelSuffix is added. When specified, it leads to the same issue with enums (when stringEnums=false)
  3. [typescript-angular] The stringEnums=true option removes the default "Enum" suffix, but still keeps the one coming from modelSuffix.

Let's say we have schema with enum:

Response:
  type: object
  properties:
    prop_name:
      type: string
      enum: [ Capital, UPPER, lower, snake_case, 'illegal+id' ]

Here is what is produced with various generator options:

generator options enum name
typescript-angular stringEnums=true ResponsePropName
typescript-angular stringEnums=true, modelSuffix="Model" ResponseModelPropNameModel
typescript-angular stringEnums=false Response.PropNameEnum
typescript-angular stringEnums=false, modelSuffix="Model" ResponseModel.PropNameModelEnum
typescript-axios - ResponsePropNameEnum
typescript-axios modelNameSuffix="Model" ResponseModelPropNameModelEnum

Other TS generators (typescript-fetch, typescript-rxjs) behave similar to typescript-axios.

openapi-generator version

master, stable

OpenAPI declaration file content or url

gist: spec-enum.yml

Related issues/PRs
Suggest a fix

I suggest the following behavior for all TS generators:

  • Without modelNameSuffix, keep the existing behavior demonstrated by typescript-axios.
  • With modelNameSuffix, only append "Enum" suffix but not model suffix. So instead of ResponseModelPropNameModelEnum we should get ResponseModelPropNameEnum
  • Make typescript-angular work the same way as other TS generators: deprecate custom modelSuffix in favor of modelNameSuffix, use the standard enumSuffix="Enum"
  • Make enumSuffix configurable via options. This would provide smoother migration for existing users (e.g. one can set it to ModelEnum to mimic the old behavior)

I'm happy to create a PR implementing this change, if it sounds like a reasonable suggestion.
Actually, that's it: #5138

@macjohnny

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions