From 81699d06245cdf6b5661851e7b9549fee9dfd6f6 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 27 Aug 2019 02:33:10 +0200 Subject: [PATCH] Add TypeScript type declarations --- anylogger.d.ts | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 87 insertions(+) create mode 100644 anylogger.d.ts diff --git a/anylogger.d.ts b/anylogger.d.ts new file mode 100644 index 0000000..c71c9d1 --- /dev/null +++ b/anylogger.d.ts @@ -0,0 +1,86 @@ +export type BaseLevels = { + error: 1, + warn: 2, + info: 3, + log: 4, + debug: 5, + trace: 6, +} + +export interface BaseLogger { + /** + * The name of this logger. + */ + name: string + + (level: keyof L, message?: any, ...args: any[]): void + (message?: any, ...args: any[]): void + + error(message?: any, ...args: any[]): void + warn(message?: any, ...args: any[]): void + info(message?: any, ...args: any[]): void + log(message?: any, ...args: any[]): void + debug(message?: any, ...args: any[]): void + trace(message?: any, ...args: any[]): void +} + +export type Logger = BaseLogger & { + [P in keyof Omit]: (message?: any, ...args: any[]) => void +} + +export interface AnyLogger = Logger> { + /** + * Returns an object containing all loggers created so far, keyed by name. + */ + (): { [name: string]: T } + + /** + * @param name The name of the new logger. + * @param config An optional config object. + * @returns A logger with the given `name` and `config`. + */ + (name: string, config?: object | undefined): T + + /** + * An object containing a mapping of level names to level values. + */ + levels: L & { [name: string]: number } + + /** + * Creates a new logger function that calls `anylogger.log` when invoked. + * + * @param name The name of the new logger. + * @param config An optional config object. + * @returns A new logger function with the given `name`. + */ + new(name: string, config?: object | undefined): T + + /** + * The log function used by `anylogger.new`. + * + * @param name The name of the logger to use + * @param level The log level. + * @param message The (formatted) message or any data to log. + * @param [params] Additional log (formatting) arguments. + */ + log(name: string, level: keyof L, message?: any, ...args: any[]): void + /** + * The log function used by `anylogger.new`. + * + * @param name The name of the logger to use + * @param args The log arguments. + * @param message The (formatted) message or any data to log. + * @param [params] Additional log (formatting) arguments. + */ + log(name: string, message?: any, ...args: any[]): void + + /** + * @param logger The logger that should be (re-)extended. + * @return The logger that was given, extended. + */ + ext(logger: T): T +} + +declare const anylogger: AnyLogger + +export default anylogger diff --git a/package.json b/package.json index dfa5d7d..bb72501 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "main": "anylogger.js", "files": [ "anylogger.js", + "anylogger.d.ts", "anylogger.min.js", "anylogger.spec.js" ],