UNPKG

@cmtlyt/monitor

Version:
62 lines (57 loc) 2.88 kB
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 };