UNPKG

7.55 kBJavaScriptView Raw
1"use strict";
2var BullModule_1;
3Object.defineProperty(exports, "__esModule", { value: true });
4exports.BullModule = void 0;
5const tslib_1 = require("tslib");
6const bull_shared_1 = require("@nestjs/bull-shared");
7const common_1 = require("@nestjs/common");
8const core_1 = require("@nestjs/core");
9const bull_metadata_accessor_1 = require("./bull-metadata.accessor");
10const bull_explorer_1 = require("./bull.explorer");
11const bull_providers_1 = require("./bull.providers");
12let BullModule = BullModule_1 = class BullModule {
13 /**
14 * Registers a globally available configuration for all queues
15 * or using a specified "configKey" (if passed).
16 *
17 * @param keyOrConfig a key under which the configuration should be available or a bull configuration object
18 * @param bullConfig bull configuration object
19 */
20 static forRoot(keyOrConfig, bullConfig) {
21 const [configKey, sharedBullConfig] = typeof keyOrConfig === 'string'
22 ? [keyOrConfig, bullConfig]
23 : [undefined, keyOrConfig];
24 const sharedBullConfigProvider = {
25 provide: (0, bull_shared_1.getSharedConfigToken)(configKey),
26 useValue: sharedBullConfig,
27 };
28 return {
29 global: true,
30 module: BullModule_1,
31 providers: [sharedBullConfigProvider],
32 exports: [sharedBullConfigProvider],
33 };
34 }
35 /**
36 * Registers a globally available configuration for all queues
37 * or using a specified "configKey" (if passed).
38 *
39 * @param keyOrAsyncConfig a key under which the configuration should be available or a bull configuration object
40 * @param asyncBullConfig shared bull configuration async factory
41 */
42 static forRootAsync(keyOrAsyncConfig, asyncBullConfig) {
43 const [configKey, asyncSharedBullConfig] = typeof keyOrAsyncConfig === 'string'
44 ? [keyOrAsyncConfig, asyncBullConfig]
45 : [undefined, keyOrAsyncConfig];
46 const imports = this.getUniqImports([asyncSharedBullConfig]);
47 const providers = this.createAsyncSharedConfigurationProviders(configKey, asyncSharedBullConfig);
48 return {
49 global: true,
50 module: BullModule_1,
51 imports,
52 providers,
53 exports: providers,
54 };
55 }
56 static registerQueue(...options) {
57 const queueProviders = (0, bull_providers_1.createQueueProviders)([].concat(options));
58 const queueOptionProviders = (0, bull_providers_1.createQueueOptionProviders)([].concat(options));
59 return {
60 module: BullModule_1,
61 imports: [BullModule_1.registerCore()],
62 providers: [...queueOptionProviders, ...queueProviders],
63 exports: queueProviders,
64 };
65 }
66 static registerQueueAsync(...options) {
67 const optionsArr = [].concat(options);
68 const queueProviders = (0, bull_providers_1.createQueueProviders)(optionsArr);
69 const imports = this.getUniqImports(optionsArr);
70 const asyncQueueOptionsProviders = options
71 .map((queueOptions) => this.createAsyncProviders(queueOptions))
72 .reduce((a, b) => a.concat(b), []);
73 return {
74 imports: imports.concat(BullModule_1.registerCore()),
75 module: BullModule_1,
76 providers: [...asyncQueueOptionsProviders, ...queueProviders],
77 exports: queueProviders,
78 };
79 }
80 static createAsyncProviders(options) {
81 const optionalSharedConfigHolder = (0, bull_shared_1.createConditionalDepHolder)((0, bull_shared_1.getSharedConfigToken)(options.configKey));
82 if (options.useExisting || options.useFactory) {
83 return [
84 optionalSharedConfigHolder,
85 this.createAsyncOptionsProvider(options, optionalSharedConfigHolder),
86 ];
87 }
88 if (!options.useClass) {
89 // fallback to the "registerQueue" in case someone accidentally used the "registerQueueAsync" instead
90 return (0, bull_providers_1.createQueueOptionProviders)([options]);
91 }
92 const useClass = options.useClass;
93 return [
94 optionalSharedConfigHolder,
95 this.createAsyncOptionsProvider(options, optionalSharedConfigHolder),
96 {
97 provide: useClass,
98 useClass,
99 },
100 ];
101 }
102 static createAsyncOptionsProvider(asyncOptions, optionalSharedConfigHolderRef) {
103 if (asyncOptions.useFactory) {
104 return {
105 provide: (0, bull_shared_1.getQueueOptionsToken)(asyncOptions.name),
106 useFactory: async (optionalDepHolder, ...factoryArgs) => {
107 return {
108 ...optionalDepHolder.getDependencyRef(asyncOptions.name),
109 ...(await asyncOptions.useFactory(...factoryArgs)),
110 };
111 },
112 inject: [optionalSharedConfigHolderRef, ...(asyncOptions.inject || [])],
113 };
114 }
115 // `as Type<BullOptionsFactory>` is a workaround for microsoft/TypeScript#31603
116 const inject = [
117 (asyncOptions.useClass ||
118 asyncOptions.useExisting),
119 ];
120 return {
121 provide: (0, bull_shared_1.getQueueOptionsToken)(asyncOptions.name),
122 useFactory: async (optionalDepHolder, optionsFactory) => {
123 return {
124 ...optionalDepHolder.getDependencyRef(asyncOptions.name),
125 ...(await optionsFactory.createBullOptions()),
126 };
127 },
128 inject: [optionalSharedConfigHolderRef, ...inject],
129 };
130 }
131 static createAsyncSharedConfigurationProviders(configKey, options) {
132 if (options.useExisting || options.useFactory) {
133 return [this.createAsyncSharedConfigurationProvider(configKey, options)];
134 }
135 const useClass = options.useClass;
136 return [
137 this.createAsyncSharedConfigurationProvider(configKey, options),
138 {
139 provide: useClass,
140 useClass,
141 },
142 ];
143 }
144 static createAsyncSharedConfigurationProvider(configKey, options) {
145 if (options.useFactory) {
146 return {
147 provide: (0, bull_shared_1.getSharedConfigToken)(configKey),
148 useFactory: options.useFactory,
149 inject: options.inject || [],
150 };
151 }
152 // `as Type<SharedBullConfigurationFactory>` is a workaround for microsoft/TypeScript#31603
153 const inject = [
154 (options.useClass ||
155 options.useExisting),
156 ];
157 return {
158 provide: (0, bull_shared_1.getSharedConfigToken)(configKey),
159 useFactory: async (optionsFactory) => optionsFactory.createSharedConfiguration(),
160 inject,
161 };
162 }
163 static registerCore() {
164 return {
165 global: true,
166 module: BullModule_1,
167 imports: [core_1.DiscoveryModule],
168 providers: [bull_explorer_1.BullExplorer, bull_metadata_accessor_1.BullMetadataAccessor],
169 };
170 }
171 static getUniqImports(options) {
172 return (options
173 .map((option) => option.imports)
174 .reduce((acc, i) => acc.concat(i || []), [])
175 .filter((v, i, a) => a.indexOf(v) === i) || []);
176 }
177};
178BullModule = BullModule_1 = tslib_1.__decorate([
179 (0, common_1.Module)({})
180], BullModule);
181exports.BullModule = BullModule;