-
-
Notifications
You must be signed in to change notification settings - Fork 389
/
Copy pathbull-board.root-module.ts
122 lines (106 loc) · 3.57 KB
/
bull-board.root-module.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import { DynamicModule, Inject, MiddlewareConsumer, Module, NestModule, Provider } from "@nestjs/common";
import { createBullBoard } from "@bull-board/api";
import { BULL_BOARD_ADAPTER, BULL_BOARD_INSTANCE, BULL_BOARD_OPTIONS } from "./bull-board.constants";
import { BullBoardModuleAsyncOptions, BullBoardModuleOptions, BullBoardServerAdapter } from "./bull-board.types";
import { ApplicationConfig, HttpAdapterHost } from "@nestjs/core";
import { isExpressAdapter, isFastifyAdapter } from "./bull-board.util";
@Module({})
export class BullBoardRootModule implements NestModule {
constructor(
private readonly adapterHost: HttpAdapterHost,
private readonly applicationConfig: ApplicationConfig,
@Inject(BULL_BOARD_ADAPTER) private readonly adapter: BullBoardServerAdapter,
@Inject(BULL_BOARD_OPTIONS) private readonly options: BullBoardModuleOptions
) {
}
configure(consumer: MiddlewareConsumer): any {
const addForwardSlash = (path: string) => {
return path.startsWith('/') || path === '' ? path : `/${path}`;
};
const prefix = addForwardSlash(this.applicationConfig.getGlobalPrefix() + this.options.route);
this.adapter.setBasePath(prefix);
if (isExpressAdapter(this.adapter)) {
return consumer
.apply(this.options.middleware, this.adapter.getRouter())
.forRoutes(this.options.route);
}
if (isFastifyAdapter(this.adapter)) {
this.adapterHost.httpAdapter
.getInstance()
.register(this.adapter.registerPlugin(), { prefix });
return consumer
.apply(this.options.middleware)
.forRoutes(this.options.route);
}
}
static forRoot(options: BullBoardModuleOptions): DynamicModule {
const serverAdapter = new options.adapter();
const bullBoardProvider: Provider = {
provide: BULL_BOARD_INSTANCE,
useFactory: () => createBullBoard({
queues: [],
serverAdapter: serverAdapter,
options: options.boardOptions,
})
};
const serverAdapterProvider: Provider = {
provide: BULL_BOARD_ADAPTER,
useFactory: () => serverAdapter
};
const optionsProvider: Provider = {
provide: BULL_BOARD_OPTIONS,
useValue: options
};
return {
module: BullBoardRootModule,
global: true,
imports: [],
providers: [
serverAdapterProvider,
optionsProvider,
bullBoardProvider
],
exports: [
serverAdapterProvider,
bullBoardProvider,
optionsProvider
],
};
}
static forRootAsync(options: BullBoardModuleAsyncOptions): DynamicModule {
const bullBoardProvider: Provider = {
provide: BULL_BOARD_INSTANCE,
useFactory: (options: BullBoardModuleOptions, adapter: BullBoardServerAdapter) => createBullBoard({
queues: [],
serverAdapter: adapter,
options: options.boardOptions,
}),
inject: [BULL_BOARD_OPTIONS, BULL_BOARD_ADAPTER]
};
const serverAdapterProvider: Provider = {
provide: BULL_BOARD_ADAPTER,
useFactory: (options: BullBoardModuleOptions) => new options.adapter(),
inject: [BULL_BOARD_OPTIONS]
};
const optionsProvider: Provider = {
provide: BULL_BOARD_OPTIONS,
useFactory: options.useFactory,
inject: options.inject
}
return {
module: BullBoardRootModule,
global: true,
imports: options.imports,
providers: [
serverAdapterProvider,
optionsProvider,
bullBoardProvider
],
exports: [
serverAdapterProvider,
bullBoardProvider,
optionsProvider
],
};
}
}