UNPKG

container.ts

Version:
66 lines (65 loc) 2.59 kB
/// <reference types="debug" /> import * as Debug from "debug"; import { ErrorChain } from "../lib/error"; import { Container } from "./Container"; import { Environment } from "./Environment"; import { ELogLevel, ILogMessage, ILogMetadata, Log } from "./Log"; import { EMetricType, IMetricTags, Metric } from "./Metric"; import { Observable } from "./RxJS"; import { IModule, IModuleDependencies, IModuleOptions } from "./Types"; /** Module error class. */ export declare class ModuleError extends ErrorChain { constructor(name: string, cause?: Error); } /** Container module log class. */ export declare class ModuleLog extends Log { protected readonly container: Container; protected readonly name: string; constructor(container: Container, name: string); /** * Sends log message to container bus for consumption by modules. * Adds module name to metadata object by default. */ protected log(level: ELogLevel, message: ILogMessage, metadata: ILogMetadata, ...args: any[]): void; } /** Container module metric class. */ export declare class ModuleMetric extends Metric { protected readonly container: Container; protected readonly name: string; constructor(container: Container, name: string); /** * Sends metric message to container bus for consumption by modules. * Adds module name to tags object by default. */ protected metric(type: EMetricType, name: string, value: any, tags: IMetricTags): void; } /** Base class for container class modules with dependency injection. */ export declare class Module implements IModule { /** Default module name. */ static readonly moduleName: string; /** Error names. */ static readonly ERROR: { DEPENDENCY: string; }; /** Module name. */ readonly moduleName: string; /** Module container reference. */ readonly container: Container; /** Module log interface. */ readonly log: ModuleLog; /** Module metric interface. */ readonly metric: ModuleMetric; /** Module debug interface. */ readonly debug: Debug.IDebugger; /** Module container environment reference. */ readonly environment: Environment; /** Module container and module names. */ readonly namespace: string; constructor(options: IModuleOptions); /** Module dependencies hook. */ moduleDependencies(...previous: IModuleDependencies[]): IModuleDependencies; /** Module operational state. */ moduleUp(): void | Observable<void>; /** Module non-operational state. */ moduleDown(): void | Observable<void>; }