nestjs-asyncapi

NestJS AsyncAPI module - generate the documentation of your event-based services using decorators

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
nestjs-asyncapi
117131.1.114 days ago2 years agoMinified + gzip package size for nestjs-asyncapi in KB

Readme

StandWithUkraine
#StandWithUkraine

Description

AsyncApi module for Nest.
Generate AsyncApi documentation (for event-based services, like websockets) in a similar to nestjs/swagger fashion.
Documentation example

Installation

full installation (with chromium)
$ npm i --save nestjs-asyncapi

nestjs-async api package doesn't require chromium (which is required by asyncapi lib), so u can skip chromium installation by setting PUPPETEERSKIPCHROMIUMDOWNLOAD=true environment variable.
$ PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm i --save nestjs-asyncapi

Quick Start

Include AsyncApi initialization into your bootstrap function.
async function bootstrap() {
    const app = await NestFactory.create<NestExpressApplication>(AppModule);

    const asyncApiOptions = new AsyncApiDocumentBuilder()
        .setTitle('Feline')
        .setDescription('Feline server description here')
        .setVersion('1.0')
        .setDefaultContentType('application/json')
        .addSecurity('user-password', {type: 'userPassword'})
        .addServer('feline-ws', {
            url: 'ws://localhost:3000',
            protocol: 'socket.io',
        })
        .build();

    const asyncapiDocument = await AsyncApiModule.createDocument(app, asyncApiOptions);
    await AsyncApiModule.setup(docRelPath, app, asyncapiDocument);

    // other bootstrap procedures here

    return app.listen(3000);
}

AsyncApi module explores Controllers & WebSocketGateway by default. In most cases you won't need to add extra annotation, but if you need to define asyncApi operations in a class that's not a controller or gateway use AsyncApiClass decorator.
Mark pub/sub methods via AsyncApiPub or AsyncApiSub decorators

class CreateFelineDto {
    @ApiProperty()
    demo: string;
}

@Controller()
class DemoController {
    @AsyncApiPub({
        channel: 'create/feline',
        message: {
            payload: CreateFelineDto
        },
    })
    async createFeline() {
        // logic here
    }

    @AsyncApiSub({
        channel: 'create/feline',
        message: {
            payload: CreateFelineDto
        },
    })
    async createFeline() {
        // logic here
    }
}

For more detailed examples please check out https://github.com/flamewow/nestjs-asyncapi/tree/main/sample sample app.
Do you use this library and like it? Don't be shy to give it a star on github ā˜…