npm package: @mediaedge4tw/nestjs-pubsub
Description: PubSubJS for nestjs module
Author: Cymon Dez
Latest version: 1.0.1

<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="120" alt="Nest Logo" /></a>
</p>

[travis-image]: https://api.travis-ci.org/nestjs/nest.svg?branch=master
[travis-url]: https://travis-ci.org/nestjs/nest
[linux-image]: https://img.shields.io/travis/nestjs/nest/master.svg?label=linux
[linux-url]: https://travis-ci.org/nestjs/nest

  <p align="center">A progressive <a href="http://nodejs.org" target="blank">Node.js</a> framework for building efficient and scalable server-side applications.</p>
    <p align="center">
<a href="https://www.npmjs.com/~nestjscore"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a>
<a href="https://www.npmjs.com/~nestjscore"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a>
<a href="https://www.npmjs.com/~nestjscore"><img src="https://img.shields.io/npm/dm/@nestjs/core.svg" alt="NPM Downloads" /></a>
<a href="https://coveralls.io/github/nestjs/nest?branch=master"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#5" alt="Coverage" /></a>
<a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a>
<a href="https://opencollective.com/nest#backer"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
<a href="https://opencollective.com/nest#sponsor"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>
  <a href="https://paypal.me/kamilmysliwiec"><img src="https://img.shields.io/badge/Donate-PayPal-dc3d53.svg"/></a>
  <a href="https://twitter.com/nestframework"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow"></a>
</p>
  <!--[![Backers on Open Collective](https://opencollective.com/nest/backers/badge.svg)](https://opencollective.com/nest#backer)
  [![Sponsors on Open Collective](https://opencollective.com/nest/sponsors/badge.svg)](https://opencollective.com/nest#sponsor)-->

## Description

[PubSubJs](https://sahadar.github.io/pubsub/) module for [Nest](https://github.com/nestjs/nest).

## Installation

```bash
 npm i --save @mediaedge4tw/nest-pubsub
```

## Quick Start

import in AppModule

PubsubModule is a global module.

```ts
import { Module } from '@nestjs/common';
import {PubsubModule} from '@mediaedge4tw/nest-pubsub'
@Module({
  imports: [PubsubModule.forRoot()],
})
export class AppModule { }
```

call the pubsub channel in your service

```ts
import { PubTestDataDto } from './pub-test-data.dto';
import { Injectable } from '@nestjs/common';
import { InjectPubSubChannel, NestSubscriptionListener, PubsubService } from '../../../lib';

@Injectable()
export class PubTestService {

    constructor(
      @InjectPubSubChannel() private readonly pubsubService: PubsubService<PubTestDataDto> // channel name is Default<your-channel-name
      ) { }


    public publish(subChannel: string, data: PubTestDataDto) {
        return this.pubsubService.publish([subChannel], data);
    }

    public subscribe(channel: string, func: NestSubscriptionListener<PubTestDataDto>): PubSubJS.Token {
        return this.pubsubService.subtribe([subChannel], func);
    }

    public unsubscribe(token: string) {
        this.pubsubService.unsubscribe(token);
    }
}
```

you can create custom channel dynamic by custom name

```ts

@Injectable()
export class PubService {

    constructor(
    @InjectPubSubChannel('<your-channel-name>') 
    private readonly pubsubService: PubsubService<PubTestDataDto> // channel name is <your-channel-name
      ) { }


    public publish(subChannel: string, data: PubTestDataDto) {
        return this.pubsubService.publish([subChannel], data);
    }

}

@Injectable()
export class SubService {

    constructor(
      @InjectPubSubChannel('<your-channel-name>') 
      private readonly pubsubService: PubsubService<PubTestDataDto> // channel name is <your-channel-name>
      ) { }

    public subscribe(channel: string, func: NestSubscriptionListener<PubTestDataDto>): PubSubJS.Token {
        return this.pubsubService.subtribe([subChannel], func);
    }

    public unsubscribe(token: string) {
        this.pubsubService.unsubscribe(token);
    }
}

```

## Support

Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).

## License

[MIT licensed](LICENSE).