container.ts
Version:
Modular application framework
66 lines (65 loc) • 2.59 kB
TypeScript
/// <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>;
}