Code generation from OpenAPI 3 to TypeScript
Lightweight and simple. Can be used for browser's and for Node.js ecosystems. Now supports converting from OpenAPI 3 to TypeScript types (OpenAPI 2 and below are not supported).
For example, creates constructions such as (click to expand):
/** * Typical 401 response */ /** * Kind of request error: syntax or semantic. Syntax error means the * application logic error, semantics — error of data, that contragent * inputs. */ /** * Typical response one Bad Request Error (400) */ /** * ## MetaDataView * MetaData helps decide what the method has to use to * interpret and render parameter or category of parameters. */;
🚦 Status of project
- Stabilization: ready to use in non-production projects (see Road Map).
- Not supported YML (only JSON). Will be supported soon. Now, you can use something like js-yaml
- 🐞 UPDATE: Fixed problem with infinity loop in recursive types!
Please, if it possible: send me your schemas that not converts properly.
Online demo
Work in progress! Now, see how to use.
Road map
Work is just started, and current functionality (creating TypeScript types) — It's just a first part of the supposed functionality. With time, it's supposed, possibilities of this plugin will be extended by:
- Make project well documented [in progress]
- YAML support [in progress]
- Stabilization [in progress]
- Playground site [in progress]
- Plugins support
- Generation classes (now creates only interfaces) with internal validation [ concept description is coming soon ]
- Generation API Classes
- Solutions for AngularX based on Assured requests idea with internal validation [ concept description is coming soon ]
- May be, something else...
- DDD-tools (Start kit for OpenAPI3-projects):
- Other languages (is there are need for it?): Kotlin, Java, PHP,
Ideology
- Data format loyalty: it's should be as useful as it possible regardless validity of source data.
- Integration: solution should be able to be integrated to any system (at least, based on NPM). It's mean, should have CLI and API.
Why not swagger-codegen?
- Uses NPM instead Java (install via npm and easy-integratable)
- Lightweight (swagger-codegen solution — it's about a 14mb for ready JAR)
- Supports OpenAPI3
- Above all, intended for TypeScript
Install
1. Install TypeScript
npm install typescript@latest -g
2. Install oapi3codegen global (for CLI using)
npm install oapi3codegen -g
3. Install oapi3codegen for local project
npm install oapi3codegen --save
Using via CLI
oapi3codegen --srcPath /PATH/TO/SRC/open-api-file.json --destPath /PATH/TO/DEST --separatedFiles true
CLI arguments
CLI Argument | Description |
---|---|
srcPath | Path of url of JSON file with OpenAPI3 specification |
destPath | Path for destination directory |
separatedFiles | Whether should converted types be saved in separated files, or in single file |
Also, you can set some of options for convertor's configuration config via CLI:
Option | Description |
---|---|
defaultContentType | Default content-type contains no prefixes/suffixes in type names. |
implicitTypesRefReplacement | Mode when models that refer to any models via $ref are replacing implicitly even if firsts have names |
Using via API (TypeScript)
You can convert whole OpenAPI3-specification:
; ; /** * Base models of specification: * - Requests bodies models * - Requests params sets models * - Responses models * * Converting starts from entry points and extracts * referred types and dependencies. It s why we need * to get "entry points". */; /** * Rendering each type: every entry point and each of * theirs related types. */Convertor.renderRecursive entryPoints,;
And also, you can convert stand-alone JSON-schema into type descriptor, that could be rendered:
;// you need prettier to beautify result of rendering;// provides `_.each(...)` for our example; ; ; ; _.eachconvertResult, ;
And this code will print result:
/** * ## Person * Information about person you have to register in your system. */
API (TypeScript)
Coming soon...
How to extend?
Coming soon...