0.0.10 • Published 12 months ago

@ibg/openapi-router v0.0.10

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

Status: Experimental

@ibg/openapi-router is a thin wrapper around the router of web frameworks like Express and Hono, offering OpenAPI typesafety and seamless integration with validation libraries such as Valibot and Zod.

  • Typesafe: Build with TypeScript for strong type safety and support for openapi-typescript types
  • Framework Agnostic: Compatible with Express, Hono, and other popular web frameworks
  • Validation-First: Integrates with Valibot, Zod, and other validators to ensure requests adhere to expected types
  • Modular & Extendable: Easily extendable with features like withExpress(), ..

📚 Examples

🌟 Motivation

The goal is to provide a typesafe and straightforward wrapper around web framework routers, seamlessly integrating with OpenAPI schemas using openapi-typescript and ensuring type validation with libraries like Zod and Valibot.

📖 Usage

ExpressJs

import express, { Router } from 'express';
import * as v from 'valibot';
import { vValidator } from 'validation-adapters/valibot';
import { createExpressOpenApiRouter } from '@ibg/openapi-router';
import { paths } from './path/to/openapi/types';

const app = express();

app.use(express.json());

const router = Router();
const openapiRouter = createExpressOpenApiRouter<paths>(router);

openapiRouter.get('/pet/{petId}', {
    pathValidator: vValidator(
        v.object({
            petId: v.number()
        })
    ),
    handler: async (req, res, next) => {}
});

openapiRouter.get('/pet/findByTags', {
    queryValidator: vValidator(
        v.object({
            tags: v.optional(v.array(v.string()))
        })
    ),
    handler: (req, res, next) => {}
});

app.use('/*', router);

Hono

import { Hono } from 'hono';
import * as v from 'valibot';
import { vValidator } from 'validation-adapters/valibot';
import { createHonoOpenApiRouter } from '@ibg/openapi-router';
import { paths } from './path/to/openapi/types';

export const app = new Hono();

const router = new Hono();
const openapiRouter = createHonoOpenApiRouter<paths>(router);

openapiRouter.get('/pet/{petId}', {
    pathValidator: vValidator(
        v.object({
            petId: v.number()
        })
    ),
    handler: async (c) => {}
});

openapiRouter.get('/pet/findByTags', {
    queryValidator: vValidator(
        v.object({
            tags: v.optional(v.array(v.string()))
        })
    ),
    handler: (c) => {}
});

// Application endpoint
app.route('/', router);
0.0.10

12 months ago

0.0.9

12 months ago

0.0.8

12 months ago

0.0.7

12 months ago

0.0.6

12 months ago

0.0.5

12 months ago

0.0.4

12 months ago