UNPKG

container.ts

Version:
80 lines (79 loc) 3.13 kB
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"; /** Container options injected by awilix library. */ export interface IModuleOptions { moduleName: string; opts: any; } /** Module dependencies. */ export interface IModuleDependencies { [key: string]: typeof Module; } /** Module up/down hooks. */ export declare type IModuleUp = () => Promise<void>; export declare type IModuleDown = () => Promise<void>; export declare type IModuleHook = IModuleUp | IModuleDown; /** Module destroy hook. */ export declare type IModuleDestroy = () => void; /** Module error codes. */ export declare enum EModuleError { Dependency = "ModuleError.Dependency" } /** Module error class. */ export declare class ModuleError extends ErrorChain { constructor(code: EModuleError, cause?: Error, context?: object); } /** Container module log class. */ export declare class ModuleLog extends Log { protected readonly container: Container; protected readonly namespace: string; constructor(container: Container, namespace: string); /** * Sends log message to container bus for consumption by modules. * Adds module namespace 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 namespace: string; constructor(container: Container, namespace: string); /** * Sends metric message to container bus for consumption by modules. * Adds module namespace to tags object by default. */ protected metric(type: EMetricType, name: string, value: any, tags: IMetricTags, ...args: any[]): void; } /** Base class for container class modules with dependency injection. */ export declare class Module { /** Default module name. */ static readonly moduleName: 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. */ get environment(): Environment; /** Module container and module names. */ get namespace(): string; constructor(options: IModuleOptions); /** Module dependencies hook. */ moduleDependencies(...args: IModuleDependencies[]): IModuleDependencies; /** Module operational state hook. */ moduleUp(...args: IModuleUp[]): Promise<void>; /** Module non-operational state hook. */ moduleDown(...args: IModuleDown[]): Promise<void>; /** Module destruction hook. */ moduleDestroy(...args: IModuleDestroy[]): void; }