@cmtlyt/monitor
Version:
62 lines (57 loc) • 2.88 kB
text/typescript
import { Logger, Kind, LoggerOptions as LoggerOptions$1 } from '@cmtlyt/logger';
import { TObject as TObject$1, TExclude } from '@cmtlyt/base';
type OriginalOnLogBefore<T extends string> = Required<LoggerOptions$1<T, unknown>>['onLogBefore'];
type OriginalOnLogBeforeEvent<T extends string> = Parameters<OriginalOnLogBefore<T>>[0];
type LoggerOptions<T extends string> = TExclude<LoggerOptions$1<T>, 'onLogBefore'>;
type MonitorKind = 'system' | 'systemError' | 'event';
interface LogInfo<T extends string, E extends TObject$1<any>> {
/** 日志信息 */
logInfo: OriginalOnLogBeforeEvent<T>;
config: MonitorConfig<T, E>;
}
interface ExtendLoggerOptions<T extends string, E extends TObject$1<any>> extends TExclude<LoggerOptions<T>, 'getPrintFunc'> {
getPrintFunc?: (this: MonitorConfig<T, E>, logInfo: T | Kind) => ((...args: unknown[]) => void) | null | undefined;
}
interface GenerateExtraInfo {
event: Event;
systemExtra: {
timestamp: number;
isCapture: boolean;
selector: string;
};
}
interface ListenEventConfig<This> {
events?: (keyof WindowEventMap)[];
needListenCapture?: boolean;
/**
* 生成额外信息, 该格外信息会参与日志的格式化, 所以不允许出现循环引用
*/
generateExtra?: (this: This, info: GenerateExtraInfo) => TObject$1<any>;
}
interface BaseMonitorConfig<UserExtendLogType extends string = MonitorKind, ExtendConfig extends TObject$1<any> = unknown, ExtendLogType extends string = UserExtendLogType | MonitorKind, This = MonitorConfig<ExtendLogType, ExtendConfig>> {
/**
* 事件监听的根元素
* @default window
*/
rootElement?: HTMLElement | Window;
/** 日志输出工具配置 */
loggerOptions: ExtendLoggerOptions<ExtendLogType, ExtendConfig>;
/** 监控事件配置 */
listenEventConfig?: ListenEventConfig<This>;
/** 日志格式化 */
formatLogInfo?: (this: This, info: LogInfo<Kind | ExtendLogType, ExtendConfig>) => any;
/** 日志上报策略 */
reportStrategy?: (this: This, info: any) => boolean;
/** 日志上报前处理 */
formatReportInfo?: (this: This, info: any) => any;
/** 日志上报 */
reportLog?: (this: This, info: any) => void;
}
type MonitorConfig<ExtendLogType extends string = MonitorKind, ExtendConfig extends TObject$1<any> = unknown> = BaseMonitorConfig<ExtendLogType, ExtendConfig> & ExtendConfig;
type MonitorLogger<ET extends string = MonitorKind> = Logger & Record<ET | MonitorKind, (...args: unknown[]) => void>;
type TKind = MonitorKind | Kind;
/**
* 创建监控
*/
declare function createMonitor<ExtendLogType extends string = MonitorKind, ExtendConfig extends TObject<any> = unknown>(config: MonitorConfig<ExtendLogType, ExtendConfig>): MonitorLogger<ExtendLogType>;
export { type TKind as Kind, type MonitorLogger, createMonitor };