import { LogLevel, LogFilter } from "./LogFilter"; export interface ISerializedItem { s: number; d?: number; v: LogItemValues; l: LogLevel; e?: { stack?: string; name: string; message: string; }; f?: boolean; c?: Array; } export interface ILogItem { logLevel: LogLevel; error?: Error; readonly logger: ILogger; readonly level: typeof LogLevel; readonly end?: number; readonly start?: number; readonly values: Readonly; wrap(labelOrValues: LabelOrValues, callback: LogCallback, logLevel?: LogLevel, filterCreator?: FilterCreator): T; /*** This is sort of low-level, you probably want to use wrap. If you do use it, it should only be called once. */ run(callback: LogCallback): T; log(labelOrValues: LabelOrValues, logLevel?: LogLevel): ILogItem; set(key: string, value: unknown): ILogItem; set(key: object): ILogItem; runDetached(labelOrValues: LabelOrValues, callback: LogCallback, logLevel?: LogLevel, filterCreator?: FilterCreator): ILogItem; wrapDetached(labelOrValues: LabelOrValues, callback: LogCallback, logLevel?: LogLevel, filterCreator?: FilterCreator): void; refDetached(logItem: ILogItem, logLevel?: LogLevel): void; ensureRefId(): void; catch(err: Error): Error; serialize(filter: LogFilter, parentStartTime: number | undefined, forced: boolean): ISerializedItem | undefined; finish(): void; forceFinish(): void; child(labelOrValues: LabelOrValues, logLevel?: LogLevel, filterCreator?: FilterCreator): ILogItem; discard(): void; } export interface ILogger { log(labelOrValues: LabelOrValues, logLevel?: LogLevel): ILogItem; child(labelOrValues: LabelOrValues, logLevel?: LogLevel, filterCreator?: FilterCreator): ILogItem; wrapOrRun(item: ILogItem | undefined, labelOrValues: LabelOrValues, callback: LogCallback, logLevel?: LogLevel, filterCreator?: FilterCreator): T; runDetached(labelOrValues: LabelOrValues, callback: LogCallback, logLevel?: LogLevel, filterCreator?: FilterCreator): ILogItem; run(labelOrValues: LabelOrValues, callback: LogCallback, logLevel?: LogLevel, filterCreator?: FilterCreator): T; get level(): typeof LogLevel; getOpenRootItems(): Iterable; addReporter(reporter: ILogReporter): void; get reporters(): ReadonlyArray; /** * force-finishes any open items and passes them to the reporter, with the forced flag set. * Good think to do when the page is being closed to not lose any logs. **/ forceFinish(): void; } export interface ILogReporter { setLogger(logger: ILogger): void; reportItem(item: ILogItem, filter?: LogFilter, forced?: boolean): void; } export type LogItemValues = { l?: string; t?: string; id?: unknown; status?: string | number; refId?: number; ref?: number; [key: string]: any; }; export type LabelOrValues = string | LogItemValues; export type FilterCreator = ((filter: LogFilter, item: ILogItem) => LogFilter); export type LogCallback = (item: ILogItem) => T;