Skip to content

NestJS server codegen #21494

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

Open
wants to merge 18 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/workflows/samples-typescript-nestjs-server.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: TypeScript NestJS Server

on:
pull_request:
paths:
- samples/server/petstore/typescript-nestjs-server/**
- .github/workflows/samples-typescript-nestjs-server.yaml
jobs:
build:
name: Test TypeScript NestJS Server
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
sample:
# clients
- samples/server/petstore/typescript-nestjs-server
node-version:
- 16
- 18
- 20
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}

- name: Install
working-directory: ${{ matrix.sample }}
run: |
npm run preinstall
npm i

- name: Test
working-directory: ${{ matrix.sample }}
run: npm run test
1 change: 1 addition & 0 deletions CI/circle_parallel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ elif [ "$NODE_INDEX" = "3" ]; then
(cd samples/client/petstore/javascript-flowtyped && mvn integration-test)
(cd samples/client/petstore/javascript-es6 && mvn integration-test)
(cd samples/client/petstore/javascript-promise-es6 && mvn integration-test)
(cd samples/server/petstore/typescript-nestjs-server && mvn integration-test)

else
echo "Running node $NODE_INDEX ..."
Expand Down
4 changes: 4 additions & 0 deletions bin/configs/typescript-nestjs-server.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
generatorName: typescript-nestjs-server
outputDir: samples/server/petstore/typescript-nestjs-server
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
templateDir: modules/openapi-generator/src/main/resources/typescript-nestjs-server
1 change: 1 addition & 0 deletions docs/generators.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ The following generators are available:
* [scala-play-server](generators/scala-play-server.md)
* [scalatra](generators/scalatra.md)
* [spring](generators/spring.md)
* [typescript-nestjs-server (beta)](generators/typescript-nestjs-server.md)


## DOCUMENTATION generators
Expand Down
276 changes: 276 additions & 0 deletions docs/generators/typescript-nestjs-server.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,276 @@
---
title: Documentation for the typescript-nestjs-server Generator
---

## METADATA

| Property | Value | Notes |
|-------------------------------------|----------------------------------------------|--------------------------------------------|
| generator name | typescript-nestjs-server | pass this to the generate command after -g |
| generator stability | BETA | |
| generator type | SERVER | |
| generator language | Typescript | |
| generator default templating engine | mustache | |
| helpTxt | Generates a TypeScript NestJS server module. | |

## 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 |
| fileNaming | Naming convention for the output files: 'camelCase', 'kebab-case'. | | kebab-case |
| modelFileSuffix | The suffix of the file of the generated model (model<suffix>.ts). | | null |
| modelSuffix | The suffix of the generated model. | | null |
| nestVersion | The version of Nestjs. (At least 10.0.0) | | 10.0.0 |
| npmName | The name under which you want to publish generated npm package. Required to generate a full package | | null |
| npmRepository | Use this property to set an url your private npmRepo in the package.json | | 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 |
| rxjsVersion | The version of RxJS compatible with NestJS (see ngVersion option). | | null |
| apiFileSuffix | The suffix of the file of the generated API class (api<suffix>.ts). | | .api |
| apiSuffix | The suffix of the generated API class | | Api |
| stringEnums | Generate string enums instead of objects for enum values. | | false |
| taggedUnions | Use discriminators to create tagged unions instead of extending interfaces. | | false |
| tsVersion | The version of typescript compatible with Angular (see ngVersion option). | | null |
| useSingleRequestParameter | Setting this property to true will generate functions with a single argument containing all API endpoint parameters instead of one argument per parameter. | | false |

## IMPORT MAPPING

| Type/Alias | Imports |
|------------|---------|

## INSTANTIATION TYPES

| Type/Alias | Instantiated By |
|----------------------|-----------------|
| array | Array |
| additionalProperties | Record |

## LANGUAGE PRIMITIVES

<ul class="column-ul">
<li>Array</li>
<li>Blob</li>
<li>Boolean</li>
<li>Date</li>
<li>Double</li>
<li>Error</li>
<li>File</li>
<li>Float</li>
<li>Integer</li>
<li>Long</li>
<li>Map</li>
<li>Object</li>
<li>ReadonlyArray</li>
<li>Record</li>
<li>Set</li>
<li>String</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
| 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
| PROTOBUF | ✗ | ToolingExtension
| Custom | ✗ | OAS2,OAS3
Loading