Last active
March 13, 2021 17:46
-
-
Save LayZeeDK/3651c9f9d91696d67b635e4b03c14ff0 to your computer and use it in GitHub Desktop.
Generate Lumberjack log driver with no custom options.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { inject, InjectionToken } from '@angular/core'; | |
import { LumberjackLogDriverConfig, lumberjackLogDriverConfigToken } from '@ngworker/lumberjack'; | |
export const myLogDriverConfigToken = new InjectionToken<LumberjackLogDriverConfig>('__MY_LOG_DRIVER_CONFIG__', { | |
factory: () => inject(lumberjackLogDriverConfigToken), | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { MyLogDriverRootModule } from './my-log-driver-root.module'; | |
const optionalAngularDependency = null; | |
describe(MyLogDriverRootModule.name, () => { | |
it('guards against being registered in multiple injectors', () => { | |
const rootInjectorInstance = new MyLogDriverRootModule(optionalAngularDependency as any); | |
expect(() => new MyLogDriverRootModule(rootInjectorInstance)).toThrowError(/multiple injectors/); | |
}); | |
it('does not guard the first injector that registers it', () => { | |
expect(() => new MyLogDriverRootModule(optionalAngularDependency as any)).not.toThrow(); | |
}); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { NgModule, Optional, SkipSelf } from '@angular/core'; | |
import { lumberjackLogDriverToken } from '@ngworker/lumberjack'; | |
import { MyLogDriver } from './my-log-driver.service'; | |
@NgModule({ | |
providers: [ | |
{ | |
provide: lumberjackLogDriverToken, | |
useClass: MyLogDriver, | |
multi: true, | |
}, | |
], | |
}) | |
export class MyLogDriverRootModule { | |
constructor(@Optional() @SkipSelf() maybeNgModuleFromParentInjector?: MyLogDriverRootModule) { | |
if (maybeNgModuleFromParentInjector) { | |
throw new Error( | |
'MyLogDriverModule.forRoot registered in multiple injectors. Only call it from your root injector such as in AppModule.' | |
); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { TestBed } from '@angular/core/testing'; | |
import { MyLogDriverModule } from './my-log-driver.module'; | |
describe(MyLogDriverModule.name, () => { | |
it('is guarded against direct import', () => { | |
TestBed.configureTestingModule({ | |
imports: [MyLogDriverModule], | |
}); | |
expect(() => TestBed.inject(MyLogDriverModule)) | |
.withContext(`${MyLogDriverModule.name} must guard against direct import`) | |
.toThrow(); | |
}); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { ModuleWithProviders, NgModule } from '@angular/core'; | |
import { LumberjackLogDriverConfig } from '@ngworker/lumberjack'; | |
import { myLogDriverConfigToken } from './my-log-driver-config.token'; | |
import { MyLogDriverRootModule } from './my-log-driver-root.module'; | |
/** | |
* Service module for `MyLogDriver`. | |
* | |
* Use `MyLogDriverModule.forRoot` to import. | |
*/ | |
@NgModule() | |
export class MyLogDriverModule { | |
static forRoot(config?: LumberjackLogDriverConfig): ModuleWithProviders<MyLogDriverRootModule> { | |
return { | |
ngModule: MyLogDriverRootModule, | |
providers: (config && [{ provide: myLogDriverConfigToken, useValue: config }]) || [], | |
}; | |
} | |
constructor() { | |
throw new Error('Do not import MyLogDriverModule directly. Use MyLogDriverModule.forRoot.'); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { Inject, Injectable } from '@angular/core'; | |
import { LumberjackLog, LumberjackLogDriver, LumberjackLogDriverConfig } from '@ngworker/lumberjack'; | |
import { myLogDriverConfigToken } from './my-log-driver-config.token'; | |
/** | |
* My log driver. | |
*/ | |
@Injectable() | |
export class MyLogDriver implements LumberjackLogDriver<TLog extends LumberjackLog = LumberjackLog> { | |
constructor(@Inject(myLogDriverConfigToken) public config: LumberjackLogDriverConfig) {} | |
logCritical(logDriverLog: LumberjackLogDriverLog<TLog>): void {} | |
logDebug(logDriverLog: LumberjackLogDriverLog<TLog>): void {} | |
logError(logDriverLog: LumberjackLogDriverLog<TLog>): void {} | |
logInfo(logDriverLog: LumberjackLogDriverLog<TLog>): void {} | |
logTrace(logDriverLog: LumberjackLogDriverLog<TLog>): void {} | |
logWarning(logDriverLog: LumberjackLogDriverLog<TLog>): void {} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment