Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ecube-labs/koa-x-router

`koa-x-router` is a library that extends the functionality of `@koa/router` by providing validation and automatic API documentation features. It simplifies the process of defining routes, validating request data, and generating API documentation.
https://github.com/ecube-labs/koa-x-router

adaptor-pattern documentation-generator koa koa-router koajs openapi router swagger zod

Last synced: about 1 month ago
JSON representation

`koa-x-router` is a library that extends the functionality of `@koa/router` by providing validation and automatic API documentation features. It simplifies the process of defining routes, validating request data, and generating API documentation.

Awesome Lists containing this project

README

        

# koa-x-router

NPM version
NPM downloads

`koa-x-router` is a library that extends the functionality of `@koa/router` by providing validation and automatic API documentation features. It simplifies the process of defining routes, validating request data, and generating API documentation.

## Features

- **Validation**: With `koa-x-router`, you can perform validation using various validation libraries. The library provides adapters such as `JoiAdaptor` and `ZodAdaptor` that allow you to define validation schemas using popular validation libraries like `Joi` or `Zod`. You can also implement your own custom adapter by implementing the `XRouterAdaptor` interface.

- **Automatic API Documentation**: `koa-x-router` automatically generates API documentation based on your route definitions. It extracts information about route paths, request methods, request/response data structures, and validation rules. The generated documentation can be accessed through an endpoint, making it convenient for developers to understand and consume your API.

## Installation

You can install koa-x-router with joi using npm:

```shell
npm install koa @koa/router koa-x-router joi
```

or install with zod using npm:

```shell
npm install koa @koa/router koa-x-router zod
```

### with TypeScript

```shell
npm install @types/koa @types/koa__router -D
```

## Usage

[Demo](https://stackblitz.com/edit/koa-x-router-demo?file=index.ts)

To use `koa-x-router`, import it and initialize it with an instance of `@koa/router`. Here's a basic example:

```ts
import Koa from "koa";
import bodyParser from "koa-bodyparser";
import Joi from "joi"
import { Router, JoiAdaptor, ZodAdaptor } from "koa-x-router";

const app = new Koa();
const router = new Router({
adaptors: [JoiAdaptor], // <== Important!
// adaptors: [ZodAdaptor], // If you want to use with Zod
// adaptors: [JoiAdaptor, ZodAdaptor], // or both
});
const docRouter = new Router();

// Define a route with validation
router.add({
method: "get",
path: "/users",
validate: {
query: Joi.object({
name: Joi.string(),
}),
output: {
200: {
body: Joi.array().items(
Joi.object({
name: Joi.string().required(),
age: Joi.number().positive().required(),
})
),
},
},
},
handler: async (ctx) => {
// code...
},
});

docRouter.get("/", (ctx) => {
ctx.body = `





API Documentation

body{margin: 0;padding: 0;}





`;
});

docRouter.get("/openapi.json", (ctx) => {
ctx.body = router.generateOpenApiSpecJson({
info: {
title: "koa-x-router Demo API Docs",
version: "1.0.0",
},
});
});

app.use(docRouter.routes());
app.use(bodyParser());
app.use(router.routes());

app.listen(3000, () => {
console.log("Server listening on port 3000");
});
```

You can also implement your custom adapter by implementing the `XRouterAdaptor` interface.
This allows you to use your preferred validation library for route validation.

## Contributing

Contributions are welcome!
If you have any suggestions, bug reports, or feature requests, please open an issue.

## License

This project is licensed under the Apache License 2.0.