Skip to content

Commit

Permalink
enhanced
Browse files Browse the repository at this point in the history
  • Loading branch information
Md Shamil Hossain authored and Md Shamil Hossain committed Feb 2, 2023
1 parent d9784de commit 3a56ad4
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 18 deletions.
1 change: 1 addition & 0 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
src
11 changes: 4 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,19 @@
"build": "npm run clean && npm run compile",
"clean": "rm -rf ./dist",
"compile": "tsc",
"prepare": "npm run build",
"dev": "tsc --watch"
},
"main": "dist/index.js",
"devDependencies": {
"@nestjs/bull": "^0.6.2",
"@nestjs/common": "^9.2.1",
"@nestjs/core": "^9.2.1",
"@types/bull": "^4.10.0",
"bull": "^4.10.2",
"typescript": "^4.9.4"
},
"dependencies": {
"@bull-monitor/express": "^5.1.0"
},
"peerDependencies": {
"@nestjs/bull": "^0.6.2"
"@nestjs/bull": "^0.6.2",
"@nestjs/common": "^9.2.1",
"bull": "^4.10.2",
"reflect-metadata": "^0.1.13"
}
}
21 changes: 18 additions & 3 deletions src/bull-monitor.interface.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
import { NestMiddleware, Type } from "@nestjs/common";
import { Config as BaseConfig } from "@bull-monitor/root";
import { BullModuleAsyncOptions, BullModuleOptions } from "@nestjs/bull";

type Config = Omit<BaseConfig, "queues"> & {
queues: Array<
string |
BullModuleOptions &
{
name: string,
readonly: boolean
readonly?: boolean
}
>
}

type AsyncConfig = Omit<BaseConfig, "queues"> & {
queues: Array<
BullModuleAsyncOptions &
{
readonly?: boolean
}
>
}
Expand All @@ -15,4 +24,10 @@ export interface Options {
route: string,
config: Config,
middleware?: Array<Type<NestMiddleware>>
}

export interface AsyncOptions {
route: string,
config: AsyncConfig,
middleware?: Array<Type<NestMiddleware>>
}
53 changes: 47 additions & 6 deletions src/bull-monitor.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { DynamicModule, Inject, MiddlewareConsumer, Module, NestModule } from "@
import { BullMonitorExpressService } from "./bull-monitor.service";
import { Queue } from "bull";
import { BULL_MONITOR_OPTIONS_TOKEN, BULL_MONITOR_TOKEN } from "./bull-monitor.constant";
import { Options } from "./bull-monitor.interface";
import { AsyncOptions, Options } from "./bull-monitor.interface";

@Module({})
export class BullMonitorModule implements NestModule {
Expand All @@ -21,22 +21,63 @@ export class BullMonitorModule implements NestModule {

static register(options: Options): DynamicModule {
const imports = [];
const { queues, ...restConfig } = options.config;

options.config.queues.map(queue => {
imports.push(BullModule.registerQueue({ name: (typeof queue == "string" ? queue : queue.name) }));
const configuredQueues = {};
queues.map(q => {
imports.push(BullModule.registerQueue(q));
configuredQueues[q.name] = q;
});

return {
module: BullMonitorModule,
imports: [...imports],
providers: [
{
provide: BULL_MONITOR_TOKEN,
useFactory: (...injectedQueues: Array<Queue>) => {
return new BullMonitorExpressService(injectedQueues.map(q => ({
queue: q,
config: {
readonly: configuredQueues[q.name].readonly && true
}
})), restConfig);
},
inject: [...queues.map(q => getQueueToken(q.name))]
},
{
provide: BULL_MONITOR_OPTIONS_TOKEN,
useValue: options
}
]
}
}

static registerAsync(options: AsyncOptions): DynamicModule {
const imports = [];
const { queues, ...restConfig } = options.config;

const configuredQueues = {};
queues.map(q => {
imports.push(BullModule.registerQueueAsync(q));
configuredQueues[q.name] = q;
});

return {
module: BullMonitorModule,
imports,
imports: [...imports],
providers: [
{
provide: BULL_MONITOR_TOKEN,
useFactory: (...injectedQueues: Array<Queue>) => {
return new BullMonitorExpressService(injectedQueues, restConfig);
return new BullMonitorExpressService(injectedQueues.map(q => ({
queue: q,
config: {
readonly: configuredQueues[q.name].readonly && true
}
})), restConfig);
},
inject: [...queues.map(queue => getQueueToken((typeof queue == "string" ? queue : queue.name)))]
inject: [...queues.map(q => getQueueToken(q.name))]
},
{
provide: BULL_MONITOR_OPTIONS_TOKEN,
Expand Down
8 changes: 6 additions & 2 deletions src/bull-monitor.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@ import { BullMonitorExpress } from "@bull-monitor/express";
import { Queue } from "bull";
import { BullAdapter } from "@bull-monitor/root/dist/bull-adapter";
import { Config } from "@bull-monitor/root";
import { QueueConfig } from "@bull-monitor/root/dist/queue";

export class BullMonitorExpressService extends BullMonitorExpress {
constructor(queues: Array<Queue>, config: Omit<Config, "queues">) {
constructor(queuesWithConfig: Array<{
queue: Queue,
config: QueueConfig
}>, config: Omit<Config, "queues">) {
super({
queues: queues.map(q => new BullAdapter(q)),
queues: queuesWithConfig.map(q => new BullAdapter(q.queue, q.config)),
...config
});
}
Expand Down

0 comments on commit 3a56ad4

Please sign in to comment.