import type { LEVELS } from './constants' ; export type Options = { name : string ; enabled ? : boolean ; level ? : LogLevel ; beforeReporters ? : Reporter [ ] ; reporters ? : Reporter [ ] ; filters ? : Filter [ ] ; extensions ? : Extension [ ] ; defaults ? : any ; } ; export type LogArg = { event ? : string ; message ? : string ; error ? : Error ; [ key ] : any ; } ; export type LogArgs = [ LogArg , ... any [ ] ] | [ Error , string ? , ... any [ ] ] | [ string , ... any [ ] ] ; export interface LogFn { ( error , message ? , ... args ) : void ; ( logObj , ... args ) : void ; ( message , ... args ) : void ; } export interface Logger { fatal : LogFn ; error : LogFn ; warn : LogFn ; info : LogFn ; debug : LogFn ; trace : LogFn ; child ( options ) : Logger ; addBeforeReporter ( reporter ) : void ; setBeforeReporters ( reporters ) : void ; addReporter ( reporter ) : void ; setReporters ( reporters ) : void ; addFilter ( filter ) : void ; setFilters ( filters ) : void ; addExtension ( extension ) : void ; setExtensions ( extensions ) : void ; } export type SaveState = { level : number ; enabledName : string [ ] ; enabledLevel : number [ ] ; } ; type LoggerStatic = { enable ( lvl , name ? ) : void ; disable ( lvl , name ? ) : void ; clear ( ) : void ; setLevel ( level ) : void ; setGlobalReporters ( reporters ) : void ; } ; export type Factory = Logger & LoggerStatic & ( ( configOrName : string | Options ) => Logger ) ; export type LogLevel = keyof typeof LEVELS ; export interface LogObj { name : string ; date : Date ; type ? : keyof typeof LEVELS ; level : number ; args : LogArgs ; [ key ] : any ; } export interface Reporter { log ( logObj ) : void ; } export interface Filter { filter ( logObj ) : boolean ; } export interface Extension { extend ( logObj ) : LogObj ; }