openapi-typescript
Version:
Generate TypeScript types from Swagger OpenAPI specs
240 lines (180 loc) β’ 25.2 kB
Markdown
[](https://www.npmjs.com/package/openapi-typescript)
[](https://www.npmjs.com/package/openapi-typescript)
[](https://codecov.io/gh/drwpow/openapi-typescript)
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
[](#contributors-)
<!-- ALL-CONTRIBUTORS-BADGE:END -->
# ποΈ openapi-typescript
π Convert [OpenAPI 3.0][openapi3] and [2.0 (Swagger)][openapi2] schemas to TypeScript interfaces using Node.js.
π
The output is prettified with [Prettier][prettier] (and can be customized!).
π Works for both local and remote resources (filesystem and HTTP).
View examples:
- [Stripe, OpenAPI 2.0](./examples/stripe-openapi2.ts)
- [Stripe, OpenAPI 3.0](./examples/stripe-openapi3.ts)
## Usage
### π₯οΈ CLI
#### ποΈ Reading specs from file system
```bash
npx openapi-typescript schema.yaml --output schema.ts
# π Loading spec from schema.yamlβ¦
# π schema.yaml -> schema.ts [250ms]
npx openapi-typescript "specs/**/*.yaml" --output schemas/
# π Loading spec from specs/one.yamlβ¦
# π Loading spec from specs/two.yamlβ¦
# π Loading spec from specs/three.yamlβ¦
# π specs/one.yaml -> schemas/specs/one.ts [250ms]
# π specs/two.yaml -> schemas/specs/two.ts [250ms]
# π specs/three.yaml -> schemas/specs/three.ts [250ms]
```
_Note: if generating a single schema, `--output` must be a file (preferably `*.ts`). If using globs, `--output` must be a directory._
_Thanks to [@sharmarajdaksh](https://github.com/sharmarajdaksh) for the glob feature!_
#### βοΈ Reading specs from remote resource
```bash
npx openapi-typescript https://petstore.swagger.io/v2/swagger.json --output petstore.ts
# π Loading spec from https://petstore.swagger.io/v2/swagger.jsonβ¦
# π https://petstore.swagger.io/v2/swagger.json -> petstore.ts [650ms]
```
_Note: for obvious reasons, globbing doesnβt work for remote schemas_
_Thanks to [@psmyrdek](https://github.com/psmyrdek) for the remote spec feature!_
#### Using in TypeScript
Import any top-level item from the generated spec to use it. It works best if you also alias types to save on typing:
```ts
import { components } from './generated-schema.ts';
type APIResponse = components["schemas"]["APIResponse"];
```
The reason for all the `["β¦"]` everywhere is because OpenAPI lets you use more characters than are valid TypeScript identifiers. The goal of this project is to generate _all_ of your schema, not merely the parts that are βTypeScript-safe.β
Also note that thereβs a special `operations` interface that you can import `OperationObjects` by their [operationId][openapi-operationid]:
```ts
import { operations } from './generated-schema.ts';
type getUsersById = operations["getUsersById"];
```
This is the only place where our generation differs from your schema as-written, but itβs done so as a convenience and shouldnβt cause any issues (you can still use deep references as-needed).
_Thanks to @gr2m for the operations feature!_
#### Outputting to `stdout`
```bash
npx openapi-typescript schema.yaml
```
#### CLI Options
| Option | Alias | Default | Description |
| :----------------------------- | :---- | :------: | :------------------------------------------------------------------------------------------------------ |
| `--output [location]` | `-o` | (stdout) | Where should the output file be saved? |
| `--auth [token]` | | | (optional) Provide an auth token to be passed along in the request (only if accessing a private schema) |
| `--immutable-types` | `-it` | `false` | (optional) Generates immutable types (readonly properties and readonly array) |
| `--additional-properties` | `-ap` | `false` | (optional) Allow arbitrary properties for all schema objects without `additionalProperties: false` |
| `--default-non-nullable` | | `false` | (optional) Treat schema objects with default values as non-nullable |
| `--prettier-config [location]` | `-c` | | (optional) Path to your custom Prettier configuration for output |
| `--raw-schema` | | `false` | Generate TS types from partial schema (e.g. having `components.schema` at the top level) |
### π’ Node
```bash
npm i --save-dev openapi-typescript
```
```js
const { readFileSync } = require("fs");
const openapiTS = require("openapi-typescript").default;
const input = JSON.parse(readFileSync("spec.json", "utf8")); // Input can be any JS object (OpenAPI format)
const output = openapiTS(input); // Outputs TypeScript defs as a string (to be parsed, or written to a file)
```
The Node API is a bit more flexible: it will only take a JS object as input (OpenAPI format), and return a string of TS
definitions. This lets you pull from any source (a Swagger server, local files, etc.), and similarly lets you parse,
post-process, and save the output anywhere.
If your specs are in YAML, youβll have to convert them to JS objects using a library such as [js-yaml][js-yaml]. If
youβre batching large folders of specs, [glob][glob] may also come in handy.
#### Custom Formatter
If using the Node.js API, you can optionally pass a **formatter** to openapi-typescript. This is useful if you want to override the default types and substitute your own.
For example, say your schema has the following property:
```yaml
properties:
updated_at:
type: string
format: date-time
```
By default, this will generate a type `updated_at?: string;`. But we can override this by passing a formatter to the Node API, like so:
```js
const types = openapiTS(mySchema, {
formatter(node: SchemaObject) {
if (node.format === 'date-time') {
return "Date"; // return the TypeScript βDateβ type, as a string
}
// for all other schema objects, let openapi-typescript decide (return undefined)
});
```
This will generate `updated_at?: Date` instead. Note that you will still have to do the parsing of your data yourself. But this will save you from having to also update all your types.
_Note: you donβt have to use `.format`βthis is just an example! You can use any property on a schema object to overwrite its generated type if desired._
## π
Project Goals
1. Support converting any OpenAPI 3.0 or 2.0 (Swagger) schema to TypeScript types, no matter how complicated
1. The generated TypeScript types **must** match your schema as closely as possible (i.e. donβt convert names to
`PascalCase` or follow any TypeScript-isms; faithfully reproduce your schema as closely as possible, capitalization
and all)
1. This library is a TypeScript generator, not a schema validator.
## π€ Contributing
PRs are welcome! Please see our [CONTRIBUTING.md](./CONTRIBUTING.md) guide. Opening an issue beforehand to discuss is
encouraged but not required.
[glob]: https://www.npmjs.com/package/glob
[js-yaml]: https://www.npmjs.com/package/js-yaml
[namespace]: https://www.typescriptlang.org/docs/handbook/namespaces.html
[npm-run-all]: https://www.npmjs.com/package/npm-run-all
[openapi-format]: https://swagger.io/specification/#data-types
[openapi-operationid]: https://swagger.io/specification/#operation-object
[openapi2]: https://swagger.io/specification/v2/
[openapi3]: https://swagger.io/specification
[prettier]: https://npmjs.com/prettier
### Contributors β¨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center"><a href="https://pow.rs"><img src="https://avatars3.githubusercontent.com/u/1369770?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Drew Powers</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=dangodev" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=dangodev" title="Documentation">π</a> <a href="#infra-dangodev" title="Infrastructure (Hosting, Build-Tools, etc)">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=dangodev" title="Tests">β οΈ</a></td>
<td align="center"><a href="http://smyrdek.com"><img src="https://avatars1.githubusercontent.com/u/6187417?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Przemek Smyrdek</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=psmyrdek" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=psmyrdek" title="Documentation">π</a> <a href="#ideas-psmyrdek" title="Ideas, Planning, & Feedback">π€</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=psmyrdek" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://danielenman.com"><img src="https://avatars3.githubusercontent.com/u/432487?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dan Enman</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Aenmand" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=enmand" title="Code">π»</a></td>
<td align="center"><a href="http://atlefren.net"><img src="https://avatars2.githubusercontent.com/u/1829927?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Atle Frenvik Sveen</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=atlefren" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=atlefren" title="Documentation">π</a> <a href="#ideas-atlefren" title="Ideas, Planning, & Feedback">π€</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=atlefren" title="Tests">β οΈ</a></td>
<td align="center"><a href="http://www.timdewolf.com"><img src="https://avatars0.githubusercontent.com/u/4455209?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tim de Wolf</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=tpdewolf" title="Code">π»</a> <a href="#ideas-tpdewolf" title="Ideas, Planning, & Feedback">π€</a></td>
<td align="center"><a href="https://github.com/tombarton"><img src="https://avatars1.githubusercontent.com/u/6222711?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tom Barton</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=tombarton" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=tombarton" title="Documentation">π</a> <a href="#ideas-tombarton" title="Ideas, Planning, & Feedback">π€</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=tombarton" title="Tests">β οΈ</a></td>
<td align="center"><a href="http://www.viig.no"><img src="https://avatars0.githubusercontent.com/u/1080888?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sven Nicolai Viig</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Asvnv" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=svnv" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=svnv" title="Tests">β οΈ</a></td>
</tr>
<tr>
<td align="center"><a href="https://toot.cafe/@sorin"><img src="https://avatars1.githubusercontent.com/u/2109702?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sorin Davidoi</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Asorin-davidoi" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=sorin-davidoi" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=sorin-davidoi" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://github.com/scvnathan"><img src="https://avatars3.githubusercontent.com/u/73474?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nathan Schneirov</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=scvnathan" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=scvnathan" title="Documentation">π</a> <a href="#ideas-scvnathan" title="Ideas, Planning, & Feedback">π€</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=scvnathan" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://lbenie.xyz/"><img src="https://avatars1.githubusercontent.com/u/7316046?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucien BΓ©niΓ©</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=lbenie" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=lbenie" title="Documentation">π</a> <a href="#ideas-lbenie" title="Ideas, Planning, & Feedback">π€</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=lbenie" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://boris.sh"><img src="https://avatars1.githubusercontent.com/u/17952318?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Boris K</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=bokub" title="Documentation">π</a></td>
<td align="center"><a href="https://twitter.com/antonk52"><img src="https://avatars1.githubusercontent.com/u/5817809?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anton</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Aantonk52" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=antonk52" title="Code">π»</a> <a href="#ideas-antonk52" title="Ideas, Planning, & Feedback">π€</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=antonk52" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://github.com/tshelburne"><img src="https://avatars3.githubusercontent.com/u/1202267?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tim Shelburne</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=tshelburne" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=tshelburne" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://typeofweb.com"><img src="https://avatars0.githubusercontent.com/u/1338731?v=4?s=100" width="100px;" alt=""/><br /><sub><b>MichaΕ Miszczyszyn</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=mmiszy" title="Code">π»</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/skh-"><img src="https://avatars1.githubusercontent.com/u/1292598?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sam K Hall</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=skh-" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=skh-" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://github.com/BlooJeans"><img src="https://avatars2.githubusercontent.com/u/1751182?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Matt Jeanes</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=BlooJeans" title="Code">π»</a></td>
<td align="center"><a href="https://www.selbekk.io"><img src="https://avatars1.githubusercontent.com/u/1307267?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kristofer Giltvedt Selbekk</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=selbekk" title="Code">π»</a></td>
<td align="center"><a href="https://mause.me"><img src="https://avatars2.githubusercontent.com/u/1405026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Elliana May</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=Mause" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=Mause" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://github.com/henhal"><img src="https://avatars3.githubusercontent.com/u/9608258?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Henrik Hall</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=henhal" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=henhal" title="Documentation">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=henhal" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://dev.to/gr2m"><img src="https://avatars3.githubusercontent.com/u/39992?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Gregor Martynus</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=gr2m" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=gr2m" title="Tests">β οΈ</a> <a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Agr2m" title="Bug reports">π</a></td>
<td align="center"><a href="http://samn.co.uk"><img src="https://avatars2.githubusercontent.com/u/408983?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sam Mesterton-Gibbons</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=samdbmg" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Asamdbmg" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=samdbmg" title="Tests">β οΈ</a></td>
</tr>
<tr>
<td align="center"><a href="https://rendall.dev"><img src="https://avatars2.githubusercontent.com/u/293263?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rendall</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=rendall" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Arendall" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=rendall" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://massaioli.wordpress.com"><img src="https://avatars3.githubusercontent.com/u/149178?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Robert Massaioli</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=robertmassaioli" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Arobertmassaioli" title="Bug reports">π</a></td>
<td align="center"><a href="http://jankuca.com"><img src="https://avatars3.githubusercontent.com/u/367262?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jan KuΔa</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=jankuca" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=jankuca" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://github.com/th-m"><img src="https://avatars3.githubusercontent.com/u/13792029?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Thomas Valadez</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=th-m" title="Documentation">π</a></td>
<td align="center"><a href="https://asithadesilva.com"><img src="https://avatars1.githubusercontent.com/u/3814354?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Asitha de Silva</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=asithade" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Aasithade" title="Bug reports">π</a></td>
<td align="center"><a href="https://github.com/MikeYermolayev"><img src="https://avatars2.githubusercontent.com/u/8783498?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mikhail Yermolayev</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3AMikeYermolayev" title="Bug reports">π</a></td>
<td align="center"><a href="https://github.com/radist2s"><img src="https://avatars.githubusercontent.com/u/725645?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alex Batalov</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=radist2s" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=radist2s" title="Tests">β οΈ</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/FedeBev"><img src="https://avatars.githubusercontent.com/u/22151395?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Federico Bevione</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3AFedeBev" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=FedeBev" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=FedeBev" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://github.com/yamacent"><img src="https://avatars.githubusercontent.com/u/8544439?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Daisuke Yamamoto</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=yamacent" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Ayamacent" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=yamacent" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://github.com/dnalborczyk"><img src="https://avatars.githubusercontent.com/u/2903325?v=4?s=100" width="100px;" alt=""/><br /><sub><b>dnalborczyk</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=dnalborczyk" title="Documentation">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=dnalborczyk" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=dnalborczyk" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://github.com/FabioWanner"><img src="https://avatars.githubusercontent.com/u/46821078?v=4?s=100" width="100px;" alt=""/><br /><sub><b>FabioWanner</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3AFabioWanner" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=FabioWanner" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=FabioWanner" title="Tests">β οΈ</a></td>
<td align="center"><a href="https://www.ashsmith.io"><img src="https://avatars.githubusercontent.com/u/1086841?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ash Smith</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=ashsmith" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Aashsmith" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=ashsmith" title="Tests">β οΈ</a></td>
<td align="center"><a href="http://mehalter.com"><img src="https://avatars.githubusercontent.com/u/1591837?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Micah Halter</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=mehalter" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=mehalter" title="Tests">β οΈ</a> <a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3Amehalter" title="Bug reports">π</a></td>
<td align="center"><a href="https://github.com/Chrg1001"><img src="https://avatars.githubusercontent.com/u/40189653?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Yuto Yoshihara</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=Chrg1001" title="Code">π»</a> <a href="https://github.com/drwpow/openapi-typescript/issues?q=author%3AChrg1001" title="Bug reports">π</a> <a href="https://github.com/drwpow/openapi-typescript/commits?author=Chrg1001" title="Tests">β οΈ</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/sharmarajdaksh"><img src="https://avatars.githubusercontent.com/u/33689528?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dakshraj Sharma</b></sub></a><br /><a href="https://github.com/drwpow/openapi-typescript/commits?author=sharmarajdaksh" title="Code">π»</a></td>
</tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification.
Contributions of any kind welcome!