UNPKG

m-web-logger

Version:

logger util for web browser

64 lines (63 loc) 2.22 kB
import { LogLevel } from "./config"; import { Logger } from "./logger"; /** * @note * * before TypeScript5.0, with experimentalDecorators: true * * - old: https://www.typescriptlang.org/docs/handbook/decorators.html * - new: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-0.html#decorators * * It wasn't supported by rollup & esbuild before https://github.com/rollup/rollup/pull/5562 & https://github.com/evanw/esbuild/pull/3754 * * - https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0213 * - * * Former code of experimentalDecorators implement: * * ```ts * export function validate( * _target: Logger, * propertyName: string, * descriptor: TypedPropertyDescriptor<(...args: any[]) => void> * ) { * const method = descriptor.value; * descriptor.value = function (this: Logger, ...args: any[]) { * if (!args.length) { * console.error(`Missing required argument in ${propertyName}.`); * } * return method?.apply(this, args); * }; * } * * export function filter(level: LogLevel) { * return function ( * _target: Logger, * _propertyName: string, * descriptor: TypedPropertyDescriptor<(...args: any[]) => void> * ) { * const method = descriptor.value; * descriptor.value = function (this: Logger, ...args: any[]) { * const hasLabelFilter = Boolean(Logger.filter); * const matchLevel = this.level <= level; * const matchLabel = Logger.filter(this.config ?? {}, ...args); * if ((matchLevel && !hasLabelFilter) || (matchLevel && matchLabel)) { * this.callHook(level, args); * return method?.apply(this, args); * } * return null; * }; * }; * } * * ``` */ /** * get method types of Class; */ type MethodsOfClass<T> = { [K in keyof T]: T[K] extends (...args: any[]) => any ? T[K] : never; }[keyof T]; export declare function validate(method: MethodsOfClass<Logger>, context: ClassMethodDecoratorContext): (this: Logger, ...args: any[]) => void; export declare function filter(level: LogLevel): (method: MethodsOfClass<Logger>, _context: ClassMethodDecoratorContext) => (this: Logger, ...args: any[]) => void | null; export {};