@bull-board/nestjs 5.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +118 -0
- package/dist/bull-board.constants.d.ts +4 -0
- package/dist/bull-board.constants.js +7 -0
- package/dist/bull-board.decorator.d.ts +1 -0
- package/dist/bull-board.decorator.js +7 -0
- package/dist/bull-board.feature-module.d.ts +10 -0
- package/dist/bull-board.feature-module.js +39 -0
- package/dist/bull-board.module.d.ts +6 -0
- package/dist/bull-board.module.js +37 -0
- package/dist/bull-board.root-module.d.ts +11 -0
- package/dist/bull-board.root-module.js +84 -0
- package/dist/bull-board.types.d.ts +28 -0
- package/dist/bull-board.types.js +2 -0
- package/dist/bull-board.util.d.ts +3 -0
- package/dist/bull-board.util.js +11 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/package.json +54 -0
- package/src/bull-board.constants.ts +5 -0
- package/src/bull-board.decorator.ts +4 -0
- package/src/bull-board.feature-module.ts +25 -0
- package/src/bull-board.module.ts +29 -0
- package/src/bull-board.root-module.ts +76 -0
- package/src/bull-board.types.ts +23 -0
- package/src/bull-board.util.ts +12 -0
- package/src/index.ts +4 -0
- package/tsconfig.json +25 -0
package/README.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# <img alt="@bull-board" src="https://raw.githubusercontent.com/felixmosh/bull-board/master/packages/ui/src/static/images/logo.svg" width="35px" /> @bull-board/nestjs
|
|
2
|
+
|
|
3
|
+
[NestJS](https://nestjs.com/) for `bull-board`.
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://www.npmjs.com/package/@bull-board/nestjs">
|
|
7
|
+
<img alt="npm version" src="https://img.shields.io/npm/v/@bull-board/nestjs">
|
|
8
|
+
</a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/bull-board">
|
|
10
|
+
<img alt="npm downloads" src="https://img.shields.io/npm/dw/bull-board">
|
|
11
|
+
</a>
|
|
12
|
+
<a href="https://github.com/vcapretz/bull-board/blob/master/LICENSE">
|
|
13
|
+
<img alt="licence" src="https://img.shields.io/github/license/vcapretz/bull-board">
|
|
14
|
+
</a>
|
|
15
|
+
<p>
|
|
16
|
+
|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
Install both @bull-board/api and this module.
|
|
22
|
+
```bash
|
|
23
|
+
$ npm install --save @bull-board/nestjs @bull-board/api
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Install the Express or Fastify adapter depending on what you use in NestJS (default is Express)
|
|
27
|
+
```bash
|
|
28
|
+
$ npm install --save @bull-board/express
|
|
29
|
+
//or
|
|
30
|
+
$ npm install --save @bull-board/fastify
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Register the root module
|
|
34
|
+
Once the installation is completed, we can import the `BullBoardModule` into your rootmodule e.g. `AppModule`.
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { Module } from '@nestjs/common';
|
|
38
|
+
import { BullBoardModule } from "@bull-board/nestjs";
|
|
39
|
+
import { ExpressAdapter } from "@bull-board/express";
|
|
40
|
+
|
|
41
|
+
@Module({
|
|
42
|
+
imports: [
|
|
43
|
+
BullModule.forRoot({
|
|
44
|
+
// your bull module config here.
|
|
45
|
+
}),
|
|
46
|
+
|
|
47
|
+
BullBoardModule.forRoot({
|
|
48
|
+
route: '/queues',
|
|
49
|
+
adapter: ExpressAdapter // Or FastifyAdapter from `@bull-board/fastify`
|
|
50
|
+
}),
|
|
51
|
+
],
|
|
52
|
+
})
|
|
53
|
+
export class AppModule {
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The `forRoot()` method registers the bull-board instance and allows you to pass several options to both the instance and module.
|
|
58
|
+
The following options are available.
|
|
59
|
+
- `route` the base route for the bull-board instance adapter.
|
|
60
|
+
- `adapter` The routing adapter to be used, either the Express Adapter or Fastify Adapter provided by bull-board.
|
|
61
|
+
- `boardOptions` options as provided by the bull-board package, such as `uiBasePath` and `uiConfig`
|
|
62
|
+
- `middleware` optional middleware for the express adapter (e.g. basic authentication)
|
|
63
|
+
|
|
64
|
+
## Register your queues
|
|
65
|
+
To register a new queue, you need to register `BullBoardModule.forFeature` in the same module as where your queues are registered.
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { Module } from '@nestjs/common';
|
|
69
|
+
import { BullBoardModule } from "@bull-board/nestjs";
|
|
70
|
+
import { BullModule } from "@nestjs/bullmq";
|
|
71
|
+
|
|
72
|
+
@Module({
|
|
73
|
+
imports: [
|
|
74
|
+
BullModule.registerQueue(
|
|
75
|
+
{
|
|
76
|
+
name: 'my_awesome_queue'
|
|
77
|
+
}
|
|
78
|
+
),
|
|
79
|
+
|
|
80
|
+
BullBoardModule.forFeature({
|
|
81
|
+
name: 'my_awesome_queue',
|
|
82
|
+
adapter: BullMQAdapter, //or use BullAdapter if you're using bull instead of bullMQ
|
|
83
|
+
}),
|
|
84
|
+
],
|
|
85
|
+
})
|
|
86
|
+
export class FeatureModule {}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The `forFeature` method registers the given queues to the bull-board instance.
|
|
90
|
+
The following options are available.
|
|
91
|
+
- `name` the queue name to register
|
|
92
|
+
- `adapter` either `BullAdapter` or `BullMQAdapter` depending on which package you use.
|
|
93
|
+
- `options` queue adapter options as found in the bull-board package, such as `readOnlyMode`, `description` etc.
|
|
94
|
+
|
|
95
|
+
## Using the bull-board instance in your controllers and/or services.
|
|
96
|
+
The created bull-board instance is available via the `@InjectBullBoard()` decorator.
|
|
97
|
+
For example in a controller:
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
import { Controller, Get } from "@nestjs/common";
|
|
101
|
+
import { BullBoardInstance, InjectBullBoard } from "@bull-board/nestjs";
|
|
102
|
+
|
|
103
|
+
@Controller('my-feature')
|
|
104
|
+
export class FeatureController {
|
|
105
|
+
|
|
106
|
+
constructor(
|
|
107
|
+
@InjectBullBoard() private readonly boardInstance: BullBoardInstance
|
|
108
|
+
) {
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
//controller methods
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
# Usage examples
|
|
116
|
+
1. [Simple NestJS setup](https://github.com/felixmosh/bull-board/tree/master/examples/with-nestjs)
|
|
117
|
+
|
|
118
|
+
For more info visit the main [README](https://github.com/felixmosh/bull-board#readme)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BULL_BOARD_INSTANCE = exports.BULL_BOARD_ADAPTER = exports.BULL_BOARD_QUEUES = exports.BULL_BOARD_OPTIONS = void 0;
|
|
4
|
+
exports.BULL_BOARD_OPTIONS = 'bull_board_options';
|
|
5
|
+
exports.BULL_BOARD_QUEUES = 'bull_board_queues';
|
|
6
|
+
exports.BULL_BOARD_ADAPTER = 'bull_board_adapter';
|
|
7
|
+
exports.BULL_BOARD_INSTANCE = 'bull_board_instance';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const InjectBullBoard: () => ParameterDecorator;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectBullBoard = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const bull_board_constants_1 = require("./bull-board.constants");
|
|
6
|
+
const InjectBullBoard = () => (0, common_1.Inject)(bull_board_constants_1.BULL_BOARD_INSTANCE);
|
|
7
|
+
exports.InjectBullBoard = InjectBullBoard;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { OnModuleInit } from "@nestjs/common";
|
|
2
|
+
import { ModuleRef } from "@nestjs/core";
|
|
3
|
+
import { BullBoardInstance, BullBoardQueueOptions } from "./bull-board.types";
|
|
4
|
+
export declare class BullBoardFeatureModule implements OnModuleInit {
|
|
5
|
+
private readonly moduleRef;
|
|
6
|
+
private readonly queues;
|
|
7
|
+
private readonly board;
|
|
8
|
+
constructor(moduleRef: ModuleRef, queues: BullBoardQueueOptions[], board: BullBoardInstance);
|
|
9
|
+
onModuleInit(): any;
|
|
10
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.BullBoardFeatureModule = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const core_1 = require("@nestjs/core");
|
|
18
|
+
const bull_shared_1 = require("@nestjs/bull-shared");
|
|
19
|
+
const bull_board_constants_1 = require("./bull-board.constants");
|
|
20
|
+
let BullBoardFeatureModule = exports.BullBoardFeatureModule = class BullBoardFeatureModule {
|
|
21
|
+
constructor(moduleRef, queues, board) {
|
|
22
|
+
this.moduleRef = moduleRef;
|
|
23
|
+
this.queues = queues;
|
|
24
|
+
this.board = board;
|
|
25
|
+
}
|
|
26
|
+
onModuleInit() {
|
|
27
|
+
for (const queueOption of this.queues) {
|
|
28
|
+
const queue = this.moduleRef.get((0, bull_shared_1.getQueueToken)(queueOption.name), { strict: false });
|
|
29
|
+
const queueAdapter = new queueOption.adapter(queue, queueOption.options);
|
|
30
|
+
this.board.addQueue(queueAdapter);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.BullBoardFeatureModule = BullBoardFeatureModule = __decorate([
|
|
35
|
+
(0, common_1.Module)({}),
|
|
36
|
+
__param(1, (0, common_1.Inject)(bull_board_constants_1.BULL_BOARD_QUEUES)),
|
|
37
|
+
__param(2, (0, common_1.Inject)(bull_board_constants_1.BULL_BOARD_INSTANCE)),
|
|
38
|
+
__metadata("design:paramtypes", [core_1.ModuleRef, Array, Object])
|
|
39
|
+
], BullBoardFeatureModule);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DynamicModule } from "@nestjs/common";
|
|
2
|
+
import { BullBoardModuleOptions, BullBoardQueueOptions } from "./bull-board.types";
|
|
3
|
+
export declare class BullBoardModule {
|
|
4
|
+
static forFeature(...queues: BullBoardQueueOptions[]): DynamicModule;
|
|
5
|
+
static forRoot(options: BullBoardModuleOptions): DynamicModule;
|
|
6
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var BullBoardModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.BullBoardModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const bull_board_feature_module_1 = require("./bull-board.feature-module");
|
|
13
|
+
const bull_board_root_module_1 = require("./bull-board.root-module");
|
|
14
|
+
const bull_board_constants_1 = require("./bull-board.constants");
|
|
15
|
+
let BullBoardModule = exports.BullBoardModule = BullBoardModule_1 = class BullBoardModule {
|
|
16
|
+
static forFeature(...queues) {
|
|
17
|
+
return {
|
|
18
|
+
module: bull_board_feature_module_1.BullBoardFeatureModule,
|
|
19
|
+
providers: [
|
|
20
|
+
{
|
|
21
|
+
provide: bull_board_constants_1.BULL_BOARD_QUEUES,
|
|
22
|
+
useValue: queues
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
static forRoot(options) {
|
|
28
|
+
return {
|
|
29
|
+
module: BullBoardModule_1,
|
|
30
|
+
imports: [bull_board_root_module_1.BullBoardRootModule.forRoot(options)],
|
|
31
|
+
exports: [bull_board_root_module_1.BullBoardRootModule],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.BullBoardModule = BullBoardModule = BullBoardModule_1 = __decorate([
|
|
36
|
+
(0, common_1.Module)({})
|
|
37
|
+
], BullBoardModule);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DynamicModule, MiddlewareConsumer, NestModule } from "@nestjs/common";
|
|
2
|
+
import { BullBoardModuleOptions, BullBoardServerAdapter } from "./bull-board.types";
|
|
3
|
+
import { HttpAdapterHost } from "@nestjs/core";
|
|
4
|
+
export declare class BullBoardRootModule implements NestModule {
|
|
5
|
+
private readonly adapterHost;
|
|
6
|
+
private readonly adapter;
|
|
7
|
+
private readonly options;
|
|
8
|
+
constructor(adapterHost: HttpAdapterHost, adapter: BullBoardServerAdapter, options: BullBoardModuleOptions);
|
|
9
|
+
configure(consumer: MiddlewareConsumer): any;
|
|
10
|
+
static forRoot(options: BullBoardModuleOptions): DynamicModule;
|
|
11
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var BullBoardRootModule_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.BullBoardRootModule = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const api_1 = require("@bull-board/api");
|
|
19
|
+
const bull_board_constants_1 = require("./bull-board.constants");
|
|
20
|
+
const core_1 = require("@nestjs/core");
|
|
21
|
+
const bull_board_util_1 = require("./bull-board.util");
|
|
22
|
+
let BullBoardRootModule = exports.BullBoardRootModule = BullBoardRootModule_1 = class BullBoardRootModule {
|
|
23
|
+
constructor(adapterHost, adapter, options) {
|
|
24
|
+
this.adapterHost = adapterHost;
|
|
25
|
+
this.adapter = adapter;
|
|
26
|
+
this.options = options;
|
|
27
|
+
}
|
|
28
|
+
configure(consumer) {
|
|
29
|
+
this.adapter.setBasePath(this.options.route);
|
|
30
|
+
if ((0, bull_board_util_1.isExpressAdapter)(this.adapter)) {
|
|
31
|
+
return consumer
|
|
32
|
+
.apply(this.options.middleware, this.adapter.getRouter())
|
|
33
|
+
.forRoutes(this.options.route);
|
|
34
|
+
}
|
|
35
|
+
if ((0, bull_board_util_1.isFastifyAdapter)(this.adapter)) {
|
|
36
|
+
this.adapterHost.httpAdapter
|
|
37
|
+
.getInstance()
|
|
38
|
+
.register(this.adapter.registerPlugin(), { prefix: this.options.route });
|
|
39
|
+
return consumer
|
|
40
|
+
.apply(this.options.middleware)
|
|
41
|
+
.forRoutes(this.options.route);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
static forRoot(options) {
|
|
45
|
+
const serverAdapter = new options.adapter();
|
|
46
|
+
const bullBoardProvider = {
|
|
47
|
+
provide: bull_board_constants_1.BULL_BOARD_INSTANCE,
|
|
48
|
+
useFactory: () => (0, api_1.createBullBoard)({
|
|
49
|
+
queues: [],
|
|
50
|
+
serverAdapter: serverAdapter,
|
|
51
|
+
options: options.boardOptions,
|
|
52
|
+
})
|
|
53
|
+
};
|
|
54
|
+
const serverAdapterProvider = {
|
|
55
|
+
provide: bull_board_constants_1.BULL_BOARD_ADAPTER,
|
|
56
|
+
useFactory: () => serverAdapter
|
|
57
|
+
};
|
|
58
|
+
const optionsProvider = {
|
|
59
|
+
provide: bull_board_constants_1.BULL_BOARD_OPTIONS,
|
|
60
|
+
useValue: options
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
module: BullBoardRootModule_1,
|
|
64
|
+
global: true,
|
|
65
|
+
imports: [],
|
|
66
|
+
providers: [
|
|
67
|
+
serverAdapterProvider,
|
|
68
|
+
optionsProvider,
|
|
69
|
+
bullBoardProvider
|
|
70
|
+
],
|
|
71
|
+
exports: [
|
|
72
|
+
serverAdapterProvider,
|
|
73
|
+
bullBoardProvider,
|
|
74
|
+
optionsProvider
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
exports.BullBoardRootModule = BullBoardRootModule = BullBoardRootModule_1 = __decorate([
|
|
80
|
+
(0, common_1.Module)({}),
|
|
81
|
+
__param(1, (0, common_1.Inject)(bull_board_constants_1.BULL_BOARD_ADAPTER)),
|
|
82
|
+
__param(2, (0, common_1.Inject)(bull_board_constants_1.BULL_BOARD_OPTIONS)),
|
|
83
|
+
__metadata("design:paramtypes", [core_1.HttpAdapterHost, Object, Object])
|
|
84
|
+
], BullBoardRootModule);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createBullBoard } from "@bull-board/api";
|
|
2
|
+
import { BoardOptions, IServerAdapter, QueueAdapterOptions } from "@bull-board/api/dist/typings/app";
|
|
3
|
+
import { BaseAdapter } from "@bull-board/api/dist/src/queueAdapters/base";
|
|
4
|
+
export type BullBoardInstance = ReturnType<typeof createBullBoard>;
|
|
5
|
+
export type BullBoardModuleOptions = {
|
|
6
|
+
route: string;
|
|
7
|
+
adapter: {
|
|
8
|
+
new (): BullBoardServerAdapter;
|
|
9
|
+
};
|
|
10
|
+
boardOptions?: BoardOptions;
|
|
11
|
+
middleware?: any;
|
|
12
|
+
};
|
|
13
|
+
export type BullBoardQueueOptions = {
|
|
14
|
+
name: string;
|
|
15
|
+
adapter: {
|
|
16
|
+
new (queue: any, options?: QueueAdapterOptions): BaseAdapter;
|
|
17
|
+
};
|
|
18
|
+
options?: QueueAdapterOptions;
|
|
19
|
+
};
|
|
20
|
+
export type BullBoardServerAdapter = IServerAdapter & {
|
|
21
|
+
setBasePath(path: string): any;
|
|
22
|
+
};
|
|
23
|
+
export type BullBoardFastifyAdapter = BullBoardServerAdapter & {
|
|
24
|
+
registerPlugin(): any;
|
|
25
|
+
};
|
|
26
|
+
export type BullBoardExpressAdapter = BullBoardServerAdapter & {
|
|
27
|
+
getRouter(): any;
|
|
28
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { BullBoardExpressAdapter, BullBoardFastifyAdapter, BullBoardServerAdapter } from "./bull-board.types";
|
|
2
|
+
export declare const isFastifyAdapter: (adapter: BullBoardServerAdapter) => adapter is BullBoardFastifyAdapter;
|
|
3
|
+
export declare const isExpressAdapter: (adapter: BullBoardServerAdapter) => adapter is BullBoardExpressAdapter;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isExpressAdapter = exports.isFastifyAdapter = void 0;
|
|
4
|
+
const isFastifyAdapter = (adapter) => {
|
|
5
|
+
return 'registerPlugin' in adapter;
|
|
6
|
+
};
|
|
7
|
+
exports.isFastifyAdapter = isFastifyAdapter;
|
|
8
|
+
const isExpressAdapter = (adapter) => {
|
|
9
|
+
return 'getRouter' in adapter;
|
|
10
|
+
};
|
|
11
|
+
exports.isExpressAdapter = isExpressAdapter;
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./bull-board.module"), exports);
|
|
18
|
+
__exportStar(require("./bull-board.types"), exports);
|
|
19
|
+
__exportStar(require("./bull-board.constants"), exports);
|
|
20
|
+
__exportStar(require("./bull-board.decorator"), exports);
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bull-board/nestjs",
|
|
3
|
+
"version": "5.3.1",
|
|
4
|
+
"description": "A NestJS module for Bull-Board dashboard.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"bull",
|
|
7
|
+
"bullmq",
|
|
8
|
+
"redis",
|
|
9
|
+
"queue",
|
|
10
|
+
"monitoring",
|
|
11
|
+
"nestjs",
|
|
12
|
+
"nestjs-module"
|
|
13
|
+
],
|
|
14
|
+
"main": "dist/index.js",
|
|
15
|
+
"author": "Dennis Snijder <dennis@snijder.io>",
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"clean": "rm -rf dist"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@bull-board/api": "^5.3.1",
|
|
23
|
+
"@bull-board/express": "^5.3.1",
|
|
24
|
+
"@bull-board/fastify": "^5.3.1",
|
|
25
|
+
"@nestjs/bullmq": "^1.1.0",
|
|
26
|
+
"@nestjs/common": "9.4.2",
|
|
27
|
+
"@nestjs/core": "9.4.2",
|
|
28
|
+
"@types/node": "18.16.16",
|
|
29
|
+
"bull": "^4.10.4",
|
|
30
|
+
"bullmq": "^3.15.2",
|
|
31
|
+
"reflect-metadata": "0.1.13",
|
|
32
|
+
"rxjs": "7.8.1",
|
|
33
|
+
"typescript": "^5.1.3"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@nestjs/bull-shared": "^0.1.3"
|
|
37
|
+
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"@bull-board/api": "^5.3.1",
|
|
40
|
+
"@bull-board/express": "^5.3.1",
|
|
41
|
+
"@nestjs/common": "^8.0.0 || ^9.0.0",
|
|
42
|
+
"@nestjs/core": "^8.0.0 || ^9.0.0",
|
|
43
|
+
"reflect-metadata": "^0.1.13",
|
|
44
|
+
"rxjs": "^7.2.0"
|
|
45
|
+
},
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "git+https://github.com/felixmosh/bull-board.git",
|
|
49
|
+
"directory": "packages/nestjs"
|
|
50
|
+
},
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Inject, Module, OnModuleInit } from "@nestjs/common";
|
|
2
|
+
import { ModuleRef } from "@nestjs/core";
|
|
3
|
+
import { getQueueToken } from "@nestjs/bull-shared";
|
|
4
|
+
import { BullBoardInstance, BullBoardQueueOptions } from "./bull-board.types";
|
|
5
|
+
import { Queue } from "bullmq";
|
|
6
|
+
import { BULL_BOARD_INSTANCE, BULL_BOARD_QUEUES } from "./bull-board.constants";
|
|
7
|
+
|
|
8
|
+
@Module({})
|
|
9
|
+
export class BullBoardFeatureModule implements OnModuleInit {
|
|
10
|
+
|
|
11
|
+
constructor(
|
|
12
|
+
private readonly moduleRef: ModuleRef,
|
|
13
|
+
@Inject(BULL_BOARD_QUEUES) private readonly queues: BullBoardQueueOptions[],
|
|
14
|
+
@Inject(BULL_BOARD_INSTANCE) private readonly board: BullBoardInstance
|
|
15
|
+
) {
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
onModuleInit(): any {
|
|
19
|
+
for (const queueOption of this.queues) {
|
|
20
|
+
const queue = this.moduleRef.get<Queue>(getQueueToken(queueOption.name), {strict: false});
|
|
21
|
+
const queueAdapter = new queueOption.adapter(queue, queueOption.options);
|
|
22
|
+
this.board.addQueue(queueAdapter);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DynamicModule, Module} from "@nestjs/common";
|
|
2
|
+
import { BullBoardFeatureModule } from "./bull-board.feature-module";
|
|
3
|
+
import { BullBoardRootModule } from "./bull-board.root-module";
|
|
4
|
+
import { BULL_BOARD_QUEUES } from "./bull-board.constants";
|
|
5
|
+
import { BullBoardModuleOptions, BullBoardQueueOptions } from "./bull-board.types";
|
|
6
|
+
|
|
7
|
+
@Module({})
|
|
8
|
+
export class BullBoardModule {
|
|
9
|
+
|
|
10
|
+
static forFeature(...queues: BullBoardQueueOptions[]): DynamicModule {
|
|
11
|
+
return {
|
|
12
|
+
module: BullBoardFeatureModule,
|
|
13
|
+
providers: [
|
|
14
|
+
{
|
|
15
|
+
provide: BULL_BOARD_QUEUES,
|
|
16
|
+
useValue: queues
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static forRoot(options: BullBoardModuleOptions): DynamicModule {
|
|
23
|
+
return {
|
|
24
|
+
module: BullBoardModule,
|
|
25
|
+
imports: [ BullBoardRootModule.forRoot(options) ],
|
|
26
|
+
exports: [ BullBoardRootModule ],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { DynamicModule, Inject, MiddlewareConsumer, Module, NestModule, Provider } from "@nestjs/common";
|
|
2
|
+
import { createBullBoard } from "@bull-board/api";
|
|
3
|
+
import { BULL_BOARD_ADAPTER, BULL_BOARD_INSTANCE, BULL_BOARD_OPTIONS } from "./bull-board.constants";
|
|
4
|
+
import { BullBoardModuleOptions, BullBoardServerAdapter } from "./bull-board.types";
|
|
5
|
+
import { HttpAdapterHost } from "@nestjs/core";
|
|
6
|
+
import { isExpressAdapter, isFastifyAdapter } from "./bull-board.util";
|
|
7
|
+
|
|
8
|
+
@Module({})
|
|
9
|
+
export class BullBoardRootModule implements NestModule {
|
|
10
|
+
|
|
11
|
+
constructor(
|
|
12
|
+
private readonly adapterHost: HttpAdapterHost,
|
|
13
|
+
@Inject(BULL_BOARD_ADAPTER) private readonly adapter: BullBoardServerAdapter,
|
|
14
|
+
@Inject(BULL_BOARD_OPTIONS) private readonly options: BullBoardModuleOptions
|
|
15
|
+
) {
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
configure(consumer: MiddlewareConsumer): any {
|
|
19
|
+
this.adapter.setBasePath(this.options.route);
|
|
20
|
+
|
|
21
|
+
if (isExpressAdapter(this.adapter)) {
|
|
22
|
+
return consumer
|
|
23
|
+
.apply(this.options.middleware, this.adapter.getRouter())
|
|
24
|
+
.forRoutes(this.options.route);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (isFastifyAdapter(this.adapter)) {
|
|
28
|
+
this.adapterHost.httpAdapter
|
|
29
|
+
.getInstance()
|
|
30
|
+
.register(this.adapter.registerPlugin(), {prefix: this.options.route});
|
|
31
|
+
|
|
32
|
+
return consumer
|
|
33
|
+
.apply(this.options.middleware)
|
|
34
|
+
.forRoutes(this.options.route);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
static forRoot(options: BullBoardModuleOptions): DynamicModule {
|
|
39
|
+
const serverAdapter = new options.adapter();
|
|
40
|
+
|
|
41
|
+
const bullBoardProvider: Provider = {
|
|
42
|
+
provide: BULL_BOARD_INSTANCE,
|
|
43
|
+
useFactory: () => createBullBoard({
|
|
44
|
+
queues: [],
|
|
45
|
+
serverAdapter: serverAdapter,
|
|
46
|
+
options: options.boardOptions,
|
|
47
|
+
})
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const serverAdapterProvider: Provider = {
|
|
51
|
+
provide: BULL_BOARD_ADAPTER,
|
|
52
|
+
useFactory: () => serverAdapter
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const optionsProvider: Provider = {
|
|
56
|
+
provide: BULL_BOARD_OPTIONS,
|
|
57
|
+
useValue: options
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
module: BullBoardRootModule,
|
|
62
|
+
global: true,
|
|
63
|
+
imports: [],
|
|
64
|
+
providers: [
|
|
65
|
+
serverAdapterProvider,
|
|
66
|
+
optionsProvider,
|
|
67
|
+
bullBoardProvider
|
|
68
|
+
],
|
|
69
|
+
exports: [
|
|
70
|
+
serverAdapterProvider,
|
|
71
|
+
bullBoardProvider,
|
|
72
|
+
optionsProvider
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createBullBoard } from "@bull-board/api";
|
|
2
|
+
import { BoardOptions, IServerAdapter, QueueAdapterOptions } from "@bull-board/api/dist/typings/app";
|
|
3
|
+
import { BaseAdapter } from "@bull-board/api/dist/src/queueAdapters/base";
|
|
4
|
+
|
|
5
|
+
export type BullBoardInstance = ReturnType<typeof createBullBoard>;
|
|
6
|
+
|
|
7
|
+
export type BullBoardModuleOptions = {
|
|
8
|
+
route: string;
|
|
9
|
+
adapter: { new(): BullBoardServerAdapter };
|
|
10
|
+
boardOptions?: BoardOptions;
|
|
11
|
+
middleware?: any
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type BullBoardQueueOptions = {
|
|
15
|
+
name: string;
|
|
16
|
+
adapter: { new(queue: any, options?: QueueAdapterOptions): BaseAdapter },
|
|
17
|
+
options?: QueueAdapterOptions,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
//create our own types with the needed functions, so we don't need to include express/fastify libraries here.
|
|
21
|
+
export type BullBoardServerAdapter = IServerAdapter & { setBasePath(path: string): any };
|
|
22
|
+
export type BullBoardFastifyAdapter = BullBoardServerAdapter & { registerPlugin(): any };
|
|
23
|
+
export type BullBoardExpressAdapter = BullBoardServerAdapter & { getRouter(): any };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BullBoardExpressAdapter,
|
|
3
|
+
BullBoardFastifyAdapter, BullBoardServerAdapter,
|
|
4
|
+
} from "./bull-board.types";
|
|
5
|
+
|
|
6
|
+
export const isFastifyAdapter = (adapter: BullBoardServerAdapter): adapter is BullBoardFastifyAdapter => {
|
|
7
|
+
return 'registerPlugin' in adapter;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const isExpressAdapter = (adapter: BullBoardServerAdapter): adapter is BullBoardExpressAdapter => {
|
|
11
|
+
return 'getRouter' in adapter;
|
|
12
|
+
}
|
package/src/index.ts
ADDED
package/tsconfig.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"module": "commonjs",
|
|
4
|
+
"declaration": true,
|
|
5
|
+
"strict": true,
|
|
6
|
+
"removeComments": false,
|
|
7
|
+
"noLib": false,
|
|
8
|
+
"emitDecoratorMetadata": true,
|
|
9
|
+
"experimentalDecorators": true,
|
|
10
|
+
"target": "es6",
|
|
11
|
+
"sourceMap": false,
|
|
12
|
+
"outDir": "./dist",
|
|
13
|
+
"rootDir": "./src",
|
|
14
|
+
"skipLibCheck": true,
|
|
15
|
+
"useUnknownInCatchVariables": false
|
|
16
|
+
},
|
|
17
|
+
"include": [
|
|
18
|
+
"src/**/*"
|
|
19
|
+
],
|
|
20
|
+
"exclude": [
|
|
21
|
+
"node_modules",
|
|
22
|
+
"**/*.spec.ts",
|
|
23
|
+
"tests",
|
|
24
|
+
]
|
|
25
|
+
}
|