@squareboat/nest-eyewitness
Version:
A simple easy-to-use package to receive error reports directly to your inbox whenever any exception is witnessed 👀 in your NestJS application.
90 lines (84 loc) • 2.12 kB
text/typescript
import {
Module,
DynamicModule,
Provider,
Type,
HttpModule,
Inject,
} from "@nestjs/common";
import {
EyewitnessOptions,
EyewitnessAsyncOptions,
EyewitnessOptionsFactory,
} from "./interfaces";
import { EYEWITNESS_OPTIONS } from "./provider.map";
import { EyewitnessService } from "./service";
import { CustomHttpService } from "./http";
import { MailmanModule } from "@squareboat/nest-mailman";
import { MailmanConfigFactory } from "./mailmanConfig";
@Module({
imports: [HttpModule],
providers: [EyewitnessService, CustomHttpService, MailmanConfigFactory],
exports: [EyewitnessService],
})
export class EyewitnessModule {
/**
* Register options
* @param options
*/
static register(options: EyewitnessOptions): DynamicModule {
return {
global: true,
module: EyewitnessModule,
imports: [
MailmanModule.registerAsync({
useClass: MailmanConfigFactory,
}),
],
exports: [MailmanConfigFactory],
providers: [
EyewitnessService,
MailmanConfigFactory,
{
provide: EYEWITNESS_OPTIONS,
useValue: options,
},
],
};
}
/**
* Register Async Options
*/
static registerAsync(options: EyewitnessAsyncOptions): DynamicModule {
return {
global: true,
module: EyewitnessModule,
providers: [
MailmanConfigFactory,
this.createStorageOptionsProvider(options),
EyewitnessService,
],
exports: [MailmanConfigFactory],
};
}
private static createStorageOptionsProvider(
options: EyewitnessAsyncOptions
): Provider {
if (options.useFactory) {
return {
provide: EYEWITNESS_OPTIONS,
useFactory: options.useFactory,
inject: options.inject || [],
};
}
const inject = [
(options.useClass || options.useExisting) as Type<EyewitnessOptions>,
];
return {
provide: EYEWITNESS_OPTIONS,
useFactory: async (optionsFactory: EyewitnessOptionsFactory) =>
await optionsFactory.createEyewitnessOptions(),
inject,
};
}
}