# swagger-codegen-typescript-koa2

> Generate TypeScript Koa2 server skeleton codes from swagger spec.

Latest version **0.1.4** (published 2018-12-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install swagger-codegen-typescript-koa2
pnpm add swagger-codegen-typescript-koa2
yarn add swagger-codegen-typescript-koa2
bun add swagger-codegen-typescript-koa2
```

Provides the command `swagger-codegen-typescript-koa2`.

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.4 |
| Published | 2018-12-05 |
| First published | 2018-10-21 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=8.0.0 |
| Dependencies | 6 |
| Unpacked size | 47.1 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Daisuke Kanda |
| Maintainers | dai1975 |
| Keywords | swagger, swagger-codegen, typescript, koa2 |

## Links

- npm: https://www.npmjs.com/package/swagger-codegen-typescript-koa2
- Repository: https://github.com/dai1975/swagger-codegen-typescript-koa2
- Homepage: https://github.com/dai1975/swagger-codegen-typescript-koa2#readme
- Issues: https://github.com/dai1975/swagger-codegen-typescript-koa2/issues
- npm.io page: https://npm.io/package/swagger-codegen-typescript-koa2

## Dependencies (6)

- [fs](https://npm.io/package/fs.md) 0.0.1-security
- [debug](https://npm.io/package/debug.md) ^4.1.0
- [mustache](https://npm.io/package/mustache.md) ^3.0.0
- [swagger2](https://npm.io/package/swagger2.md) ^1.0.1
- [bignumber.js](https://npm.io/package/bignumber.js.md) ^7.2.1
- [lodash.upperfirst](https://npm.io/package/lodash.upperfirst.md) ^4.3.1

## Alternatives

- [@openai/codex-sdk](https://npm.io/package/@openai/codex-sdk.md) — 731.4K weekly downloads
- [babel-plugin-transform-react-jsx](https://npm.io/package/babel-plugin-transform-react-jsx.md) — 565.0K weekly downloads
- [babel-helper-remove-or-void](https://npm.io/package/babel-helper-remove-or-void.md) — 508.5K weekly downloads
- [@pnpm/store-controller-types](https://npm.io/package/@pnpm/store-controller-types.md) — 186.9K weekly downloads
- [react-native-signature-canvas](https://npm.io/package/react-native-signature-canvas.md) — 155.6K weekly downloads

## Recent versions

- 0.1.4 (latest) — 2018-12-05
- 0.1.3 — 2018-11-08
- 0.1.2 — 2018-11-04
- 0.1.1 — 2018-10-27
- 0.1.0 — 2018-10-21

## README

# swagger-codegen-typescript-koa2
Generate TypeScript Koa2 server skeleton codes from swagger spec.

## usage

```console
$ node swagger-codegen-typescript-koa2 <input.swagger.yaml> <output.ts>
```

and output.ts requires dtsgenerator@1.2.0 outputs.

```console
$ npx dtsgenerator@1.2.0 -n "" -o swagger.d.ts <input.swagger.yaml>
```


## example

### input swagger file

```YAML
paths:
  '/users/{user_id}':
    get:
      summary: get user
      operationId: get_user
      description: |
        get user
      parameters:
        - in: path
          required: true
          name: user_id
          type: integer
          description: user_id
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/User'
        default:
          description: ERR
          schema:
            $ref: '#/definitions/ErrorResponse'
definitions:
  User:
    type: object
    properties:
      user_id:
        type: integer
      name:
        type: string
  ErrorResponse:
    type: object
    required:
      - code
      - name
      - message
    properties:
      code:
        type: integer
      name:
        type: string
      message:
        type: string
```

### output .ts file

```TypeScript
// ---- GET /users/{user_id} -------------------
export namespace get_user {
  export type Request = {
    user_id: number
  }
  export function make_request(ctx: KoaRouter.IRouterContext): Request {
    return {
      user_id: sctk.decode_string_integer_bignumber_external(
        ctx.params.user_id,
        {
          in: 'path',
          required: true,
          name: 'user_id',
          type: 'integer',
          description: 'user_id'
        }
      )
    }
  }
  export type Response200 = d.User
  export type ResponseDefault = d.ErrorResponse
  export type Response = {
    status: number
    body: Response200 | ResponseDefault
  }
  export interface Handler {
    (req: Request): Promise<Response>
  }
  export function route(router: Router) {
    router.get('/simple-v1/users/{user_id}', async ctx_ => {
      ...
    });
  }
}

export interface Routes {
  get_user?: get_user.Handler
  post_users?: post_users.Handler
}
export class Router extends KoaRouter {
  swagger: Routes = {}
}

export function setup(
  app: Koa,
  swagger_filepath: string,
  routes_dirpath: string
): Router {
  ...
}
```


### server code

You would implements the API such as:

```TypeScript
import Server from './server';
import * as api_simple from 'swagger-generated/simple'; //tsconfig.paths

const get_user:api_simple.get_user.Handler = async (req) => {
  console.log('get_user');
  let res200: api_simple.get_user.Response200|undefined = undefined;
  let resDef: api_simple.get_user.ResponseDefault|undefined = undefined;

  if (req.user_id == 20070831) {
    res200 = { user_id: req.user_id, name: 'Hatsune Miku' };
    return { status: 200, body: res200 };
  } else if (req.user_id == 20071227) {
    res200 = { user_id: req.user_id, name: 'Kagamine Rin' };
    return { status: 200, body: res200 };
  } else {
    resDef = { code: 404, name: 'Not Found', message: `unknown user: ${req.user_id}` };
    return { status: 404, body: resDef };
  }
};
```


And setup and run app:

```TypeScript
const server = new Server();
const router = api_simple.setup(server.app, './swagger/dist/simple/swagger.yaml', '');

router.swagger.get_user = get_user;
server.start();
```

### call API

returns implemented result:
```console
$ curl 'http://localhost:10080/simple-v1/users/20071227'
{"user_id":20071227,"name":"Kagamine Rin"}

$ curl 'http://localhost:10080/simple-v1/users/1'
{"code":404,"name":"Not Found","message":"unknown user: 1"}
```

type validation failed:

```console
$ curl 'http://localhost:10080/simple-v1/users/string'
{"code":"SWAGGER_REQUEST_VALIDATION_FAILED","errors":[{"actual":"string","expected":{"type":"integer"},"where":"path"}]}
```

### more...
If you see package.json or other settings, please check https://github.com/dai1975/swagger-codegen-typescript-koa2/tree/master/examle directory.

---
_Source: https://npm.io/package/swagger-codegen-typescript-koa2 · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
