-
-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Feature add typescript express zod server and client #23132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
be29fed
0e3530f
7c438ca
d29b41e
21f4dcc
c0b769e
9625d8d
fa7e59c
45c71be
3211363
04aa7e7
9a1aadf
8d78316
36dc3d9
f8bafb1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| name: TypeScript Express Zod | ||
|
|
||
| on: | ||
| pull_request: | ||
| paths: | ||
| - samples/server/petstore/typescript-express-zod-server/** | ||
| - samples/client/petstore/typescript-express-zod-client/** | ||
| - .github/workflows/samples-typescript-express-zod.yaml | ||
| jobs: | ||
| build: | ||
| name: Test TypeScript Express Zod | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| sample: | ||
| # server | ||
| - samples/server/petstore/typescript-express-zod-server | ||
| # client | ||
| - samples/client/petstore/typescript-express-zod-client | ||
| node-version: | ||
| - 20 | ||
| - 22 | ||
| steps: | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - uses: actions/setup-node@v5 | ||
| with: | ||
| node-version: ${{ matrix.node-version }} | ||
|
|
||
| - name: Install | ||
| working-directory: ${{ matrix.sample }} | ||
| run: | | ||
| npm i | ||
|
|
||
| - name: Test | ||
| working-directory: ${{ matrix.sample }} | ||
| run: npm run test |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| generatorName: typescript | ||
| outputDir: samples/client/petstore/typescript-express-zod-client/builds/default | ||
| inputSpec: modules/openapi-generator/src/test/resources/3_0/typescript-express-zod/petstore.yaml | ||
| additionalProperties: | ||
| framework: express-zod | ||
| hideGenerationTimestamp: "true" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| generatorName: typescript-express-zod-server | ||
| outputDir: samples/server/petstore/typescript-express-zod-server/builds/default | ||
| inputSpec: modules/openapi-generator/src/test/resources/3_0/typescript-express-zod/petstore.yaml | ||
| additionalProperties: | ||
| hideGenerationTimestamp: "true" |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,290 @@ | ||||||
| --- | ||||||
| title: Documentation for the typescript-express-zod-server Generator | ||||||
| --- | ||||||
|
|
||||||
| ## METADATA | ||||||
|
|
||||||
| | Property | Value | Notes | | ||||||
| | -------- | ----- | ----- | | ||||||
| | generator name | typescript-express-zod-server | pass this to the generate command after -g | | ||||||
| | generator stability | EXPERIMENTAL | | | ||||||
| | generator type | SERVER | | | ||||||
| | generator language | Typescript | | | ||||||
| | generator default templating engine | mustache | | | ||||||
| | helpTxt | Generates a TypeScript Express server with Zod validation. | | | ||||||
|
|
||||||
| ## CONFIG OPTIONS | ||||||
| These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. | ||||||
|
|
||||||
| | Option | Description | Values | Default | | ||||||
| | ------ | ----------- | ------ | ------- | | ||||||
| |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| | ||||||
| |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|<dl><dt>**false**</dt><dd>The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.</dd><dt>**true**</dt><dd>Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.</dd></dl>|true| | ||||||
| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| | ||||||
| |enumNameSuffix|Suffix that will be appended to all enum names.| |Enum| | ||||||
| |enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |PascalCase| | ||||||
| |enumPropertyNamingReplaceSpecialChar|Set to true to replace '-' and '+' symbols with 'minus_' and 'plus_' in enum of type string| |false| | ||||||
| |enumUnknownDefaultCase|If the server adds new enum cases, that are unknown by an old spec/client, the client will fail to parse the network response. With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the server sends an enum case that is not known by the client/spec, they can safely fallback to this case.|<dl><dt>**false**</dt><dd>No changes to the enums are made, this is the default option.</dd><dt>**true**</dt><dd>With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the enum case sent by the server is not known by the client/spec, can safely be decoded to this case.</dd></dl>|false| | ||||||
| |legacyDiscriminatorBehavior|Set to false for generators with better support for discriminators. (Python, Java, Go, PowerShell, C# have this enabled by default).|<dl><dt>**true**</dt><dd>The mapping in the discriminator includes descendent schemas that allOf inherit from self and the discriminator mapping schemas in the OAS document.</dd><dt>**false**</dt><dd>The mapping in the discriminator includes any descendent schemas that allOf inherit from self, any oneOf schemas, any anyOf schemas, any x-discriminator-values, and the discriminator mapping schemas in the OAS document AND Codegen validates that oneOf and anyOf schemas contain the required discriminator and throws an error if the discriminator is missing.</dd></dl>|true| | ||||||
| |licenseName|The name of the license| |Unlicense| | ||||||
| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name. Only change it if you provide your own run-time code for (de-)serialization of models| |original| | ||||||
| |npmName|The name under which you want to publish generated npm package. Required to generate a full package| |null| | ||||||
| |npmVersion|The version of your npm package. If not provided, using the version from the OpenAPI specification file.| |1.0.0| | ||||||
| |nullSafeAdditionalProps|Set to make additional properties types declare that their indexer may return undefined| |false| | ||||||
| |paramNaming|Naming convention for parameters: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| | ||||||
| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| | ||||||
| |snapshot|When setting this property to true, the version will be suffixed with -SNAPSHOT.yyyyMMddHHmm| |false| | ||||||
| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| | ||||||
| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| | ||||||
| |supportsES6|Generate code that conforms to ES6.| |false| | ||||||
|
|
||||||
| ## IMPORT MAPPING | ||||||
|
|
||||||
| | Type/Alias | Imports | | ||||||
| | ---------- | ------- | | ||||||
|
|
||||||
|
|
||||||
| ## INSTANTIATION TYPES | ||||||
|
|
||||||
| | Type/Alias | Instantiated By | | ||||||
| | ---------- | --------------- | | ||||||
| |array|Array| | ||||||
|
|
||||||
|
|
||||||
| ## LANGUAGE PRIMITIVES | ||||||
|
|
||||||
| <ul class="column-ul"> | ||||||
| <li>Array</li> | ||||||
| <li>Awaited</li> | ||||||
| <li>Boolean</li> | ||||||
| <li>Capitalize</li> | ||||||
| <li>ConstructorParameters</li> | ||||||
| <li>Date</li> | ||||||
| <li>Double</li> | ||||||
| <li>Error</li> | ||||||
| <li>Exclude</li> | ||||||
| <li>Extract</li> | ||||||
| <li>File</li> | ||||||
| <li>Float</li> | ||||||
| <li>InstanceType</li> | ||||||
| <li>Integer</li> | ||||||
| <li>Long</li> | ||||||
| <li>Lowercase</li> | ||||||
| <li>Map</li> | ||||||
| <li>NoInfer</li> | ||||||
| <li>NonNullable</li> | ||||||
| <li>Object</li> | ||||||
| <li>Omit</li> | ||||||
| <li>OmitThisParameter</li> | ||||||
| <li>Parameters</li> | ||||||
| <li>Partial</li> | ||||||
| <li>Pick</li> | ||||||
| <li>Readonly</li> | ||||||
| <li>ReadonlyArray</li> | ||||||
| <li>Record</li> | ||||||
| <li>Required</li> | ||||||
| <li>ReturnType</li> | ||||||
| <li>Set</li> | ||||||
| <li>String</li> | ||||||
| <li>ThisParameterType</li> | ||||||
| <li>ThisType</li> | ||||||
| <li>Uncapitalize</li> | ||||||
| <li>Uppercase</li> | ||||||
| <li>any</li> | ||||||
| <li>boolean</li> | ||||||
| <li>number</li> | ||||||
| <li>object</li> | ||||||
| <li>string</li> | ||||||
| </ul> | ||||||
|
|
||||||
| ## RESERVED WORDS | ||||||
|
|
||||||
| <ul class="column-ul"> | ||||||
| <li>abstract</li> | ||||||
| <li>await</li> | ||||||
| <li>boolean</li> | ||||||
| <li>break</li> | ||||||
| <li>byte</li> | ||||||
| <li>case</li> | ||||||
| <li>catch</li> | ||||||
| <li>char</li> | ||||||
| <li>class</li> | ||||||
| <li>const</li> | ||||||
| <li>continue</li> | ||||||
| <li>debugger</li> | ||||||
| <li>default</li> | ||||||
| <li>delete</li> | ||||||
| <li>do</li> | ||||||
| <li>double</li> | ||||||
| <li>else</li> | ||||||
| <li>enum</li> | ||||||
| <li>export</li> | ||||||
| <li>extends</li> | ||||||
| <li>false</li> | ||||||
| <li>final</li> | ||||||
| <li>finally</li> | ||||||
| <li>float</li> | ||||||
| <li>for</li> | ||||||
| <li>formParams</li> | ||||||
| <li>function</li> | ||||||
| <li>goto</li> | ||||||
| <li>headerParams</li> | ||||||
| <li>if</li> | ||||||
| <li>implements</li> | ||||||
| <li>import</li> | ||||||
| <li>in</li> | ||||||
| <li>instanceof</li> | ||||||
| <li>int</li> | ||||||
| <li>interface</li> | ||||||
| <li>let</li> | ||||||
| <li>long</li> | ||||||
| <li>native</li> | ||||||
| <li>new</li> | ||||||
| <li>null</li> | ||||||
| <li>package</li> | ||||||
| <li>private</li> | ||||||
| <li>protected</li> | ||||||
| <li>public</li> | ||||||
| <li>queryParameters</li> | ||||||
| <li>requestOptions</li> | ||||||
| <li>return</li> | ||||||
| <li>short</li> | ||||||
| <li>static</li> | ||||||
| <li>super</li> | ||||||
| <li>switch</li> | ||||||
| <li>synchronized</li> | ||||||
| <li>this</li> | ||||||
| <li>throw</li> | ||||||
| <li>transient</li> | ||||||
| <li>true</li> | ||||||
| <li>try</li> | ||||||
| <li>typeof</li> | ||||||
| <li>useFormData</li> | ||||||
| <li>var</li> | ||||||
| <li>varLocalDeferred</li> | ||||||
| <li>varLocalPath</li> | ||||||
| <li>void</li> | ||||||
| <li>volatile</li> | ||||||
| <li>while</li> | ||||||
| <li>with</li> | ||||||
| <li>yield</li> | ||||||
| </ul> | ||||||
|
|
||||||
| ## FEATURE SET | ||||||
|
|
||||||
|
|
||||||
| ### Client Modification Feature | ||||||
| | Name | Supported | Defined By | | ||||||
| | ---- | --------- | ---------- | | ||||||
| |BasePath|✓|ToolingExtension | ||||||
| |Authorizations|✗|ToolingExtension | ||||||
| |UserAgent|✗|ToolingExtension | ||||||
| |MockServer|✗|ToolingExtension | ||||||
|
|
||||||
| ### Data Type Feature | ||||||
| | Name | Supported | Defined By | | ||||||
| | ---- | --------- | ---------- | | ||||||
| |Custom|✗|OAS2,OAS3 | ||||||
| |Int32|✓|OAS2,OAS3 | ||||||
| |Int64|✓|OAS2,OAS3 | ||||||
| |Float|✓|OAS2,OAS3 | ||||||
| |Double|✓|OAS2,OAS3 | ||||||
| |Decimal|✓|ToolingExtension | ||||||
| |String|✓|OAS2,OAS3 | ||||||
| |Byte|✓|OAS2,OAS3 | ||||||
| |Binary|✓|OAS2,OAS3 | ||||||
| |Boolean|✓|OAS2,OAS3 | ||||||
| |Date|✓|OAS2,OAS3 | ||||||
| |DateTime|✓|OAS2,OAS3 | ||||||
| |Password|✓|OAS2,OAS3 | ||||||
| |File|✓|OAS2 | ||||||
| |Uuid|✗| | ||||||
| |Array|✓|OAS2,OAS3 | ||||||
| |Null|✗|OAS3 | ||||||
| |AnyType|✗|OAS2,OAS3 | ||||||
| |Object|✓|OAS2,OAS3 | ||||||
| |Maps|✓|ToolingExtension | ||||||
| |CollectionFormat|✓|OAS2 | ||||||
| |CollectionFormatMulti|✓|OAS2 | ||||||
| |Enum|✓|OAS2,OAS3 | ||||||
| |ArrayOfEnum|✓|ToolingExtension | ||||||
| |ArrayOfModel|✓|ToolingExtension | ||||||
| |ArrayOfCollectionOfPrimitives|✓|ToolingExtension | ||||||
| |ArrayOfCollectionOfModel|✓|ToolingExtension | ||||||
| |ArrayOfCollectionOfEnum|✓|ToolingExtension | ||||||
| |MapOfEnum|✓|ToolingExtension | ||||||
| |MapOfModel|✓|ToolingExtension | ||||||
| |MapOfCollectionOfPrimitives|✓|ToolingExtension | ||||||
| |MapOfCollectionOfModel|✓|ToolingExtension | ||||||
| |MapOfCollectionOfEnum|✓|ToolingExtension | ||||||
|
|
||||||
| ### Documentation Feature | ||||||
| | Name | Supported | Defined By | | ||||||
| | ---- | --------- | ---------- | | ||||||
| |Readme|✓|ToolingExtension | ||||||
| |Model|✓|ToolingExtension | ||||||
| |Api|✓|ToolingExtension | ||||||
|
|
||||||
| ### Global Feature | ||||||
| | Name | Supported | Defined By | | ||||||
| | ---- | --------- | ---------- | | ||||||
| |Host|✓|OAS2,OAS3 | ||||||
| |BasePath|✓|OAS2,OAS3 | ||||||
| |Info|✓|OAS2,OAS3 | ||||||
| |Schemes|✗|OAS2,OAS3 | ||||||
| |PartialSchemes|✓|OAS2,OAS3 | ||||||
| |Consumes|✓|OAS2 | ||||||
| |Produces|✓|OAS2 | ||||||
| |ExternalDocumentation|✓|OAS2,OAS3 | ||||||
| |Examples|✓|OAS2,OAS3 | ||||||
| |XMLStructureDefinitions|✗|OAS2,OAS3 | ||||||
| |MultiServer|✗|OAS3 | ||||||
| |ParameterizedServer|✗|OAS3 | ||||||
| |ParameterStyling|✗|OAS3 | ||||||
| |Callbacks|✗|OAS3 | ||||||
| |LinkObjects|✗|OAS3 | ||||||
|
|
||||||
| ### Parameter Feature | ||||||
| | Name | Supported | Defined By | | ||||||
| | ---- | --------- | ---------- | | ||||||
| |Path|✓|OAS2,OAS3 | ||||||
| |Query|✓|OAS2,OAS3 | ||||||
| |Header|✓|OAS2,OAS3 | ||||||
| |Body|✓|OAS2 | ||||||
| |FormUnencoded|✓|OAS2 | ||||||
| |FormMultipart|✓|OAS2 | ||||||
| |Cookie|✓|OAS3 | ||||||
|
|
||||||
| ### Schema Support Feature | ||||||
| | Name | Supported | Defined By | | ||||||
| | ---- | --------- | ---------- | | ||||||
| |Simple|✓|OAS2,OAS3 | ||||||
| |Composite|✓|OAS2,OAS3 | ||||||
| |Polymorphism|✓|OAS2,OAS3 | ||||||
| |Union|✗|OAS3 | ||||||
| |allOf|✗|OAS2,OAS3 | ||||||
| |anyOf|✗|OAS3 | ||||||
| |oneOf|✗|OAS3 | ||||||
| |not|✗|OAS3 | ||||||
|
|
||||||
| ### Security Feature | ||||||
| | Name | Supported | Defined By | | ||||||
| | ---- | --------- | ---------- | | ||||||
| |BasicAuth|✓|OAS2,OAS3 | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2: The Security Feature table overstates authentication support. Because the generated server delegates authentication to a user-supplied middleware placeholder and does not generate scheme-specific enforcement, BasicAuth, ApiKey, and OAuth2_Implicit should be marked unsupported. Prompt for AI agents |
||||||
| |ApiKey|✓|OAS2,OAS3 | ||||||
| |OpenIDConnect|✗|OAS3 | ||||||
| |BearerToken|✗|OAS3 | ||||||
| |OAuth2_Implicit|✓|OAS2,OAS3 | ||||||
| |OAuth2_Password|✗|OAS2,OAS3 | ||||||
| |OAuth2_ClientCredentials|✗|OAS2,OAS3 | ||||||
| |OAuth2_AuthorizationCode|✗|OAS2,OAS3 | ||||||
| |SignatureAuth|✗|OAS3 | ||||||
| |AWSV4Signature|✗|ToolingExtension | ||||||
|
|
||||||
| ### Wire Format Feature | ||||||
| | Name | Supported | Defined By | | ||||||
| | ---- | --------- | ---------- | | ||||||
| |JSON|✓|OAS2,OAS3 | ||||||
| |XML|✓|OAS2,OAS3 | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2: The Wire Format table claims XML is supported, but the generated handler pipeline uses Prompt for AI agents
Suggested change
|
||||||
| |PROTOBUF|✗|ToolingExtension | ||||||
| |Custom|✗|OAS2,OAS3 | ||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P1: The Schema Support table incorrectly marks
oneOfandUnionas unsupported, but the generator implements discriminated-union handling (including required discriminator properties) as described in the PR. These rows should reflect support.Prompt for AI agents