diff options
Diffstat (limited to 'src/logger.ts')
-rw-r--r-- | src/logger.ts | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/src/logger.ts b/src/logger.ts deleted file mode 100644 index 7bfde67d9..000000000 --- a/src/logger.ts +++ /dev/null @@ -1,143 +0,0 @@ -import type { CompileError } from './parser/utils/error.js'; -import { bold, blue, red, grey, underline } from 'kleur/colors'; -import { Writable } from 'stream'; -import { format as utilFormat } from 'util'; - -type ConsoleStream = Writable & { - fd: 1 | 2; -}; - -export const defaultLogDestination = new Writable({ - objectMode: true, - write(event: LogMessage, _, callback) { - let dest: ConsoleStream = process.stderr; - if (levels[event.level] < levels['error']) { - dest = process.stdout; - } - let type = event.type; - if(type !== null) { - if (event.level === 'info') { - type = bold(blue(type)); - } else if (event.level === 'error') { - type = bold(red(type)); - } - - dest.write(`[${type}] `); - } - - dest.write(utilFormat(...event.args)); - dest.write('\n'); - - callback(); - }, -}); - -interface LogWritable<T> extends Writable { - write: (chunk: T) => boolean; -} - -export type LoggerLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent'; // same as Pino -export type LoggerEvent = 'debug' | 'info' | 'warn' | 'error'; - -export interface LogOptions { - dest: LogWritable<LogMessage>; - level: LoggerLevel; -} - -export const defaultLogOptions: LogOptions = { - dest: defaultLogDestination, - level: 'info', -}; - -export interface LogMessage { - type: string | null; - level: LoggerLevel; - message: string; - args: Array<any>; -} - -const levels: Record<LoggerLevel, number> = { - debug: 20, - info: 30, - warn: 40, - error: 50, - silent: 90, -}; - -/** Full logging API */ -export function log(opts: LogOptions = defaultLogOptions, level: LoggerLevel, type: string | null, ...args: Array<any>) { - const event: LogMessage = { - type, - level, - args, - message: '', - }; - - // test if this level is enabled or not - if (levels[opts.level] > levels[level]) { - return; // do nothing - } - - opts.dest.write(event); -} - -/** Emit a message only shown in debug mode */ -export function debug(opts: LogOptions, type: string | null, ...messages: Array<any>) { - return log(opts, 'debug', type, ...messages); -} - -/** Emit a general info message (be careful using this too much!) */ -export function info(opts: LogOptions, type: string | null, ...messages: Array<any>) { - return log(opts, 'info', type, ...messages); -} - -/** Emit a warning a user should be aware of */ -export function warn(opts: LogOptions, type: string | null, ...messages: Array<any>) { - return log(opts, 'warn', type, ...messages); -} - -/** Emit a fatal error message the user should address. */ -export function error(opts: LogOptions, type: string | null, ...messages: Array<any>) { - return log(opts, 'error', type, ...messages); -} - -/** Pretty format error for display */ -export function parseError(opts: LogOptions, err: CompileError) { - let frame = err.frame - // Switch colons for pipes - .replace(/^([0-9]+)(:)/gm, `${bold('$1')} │`) - // Make the caret red. - .replace(/(?<=^\s+)(\^)/gm, bold(red(' ^'))) - // Add identation - .replace(/^/gm, ' '); - - error( - opts, - 'parse-error', - ` - - ${underline(bold(grey(`${err.filename}:${err.start.line}:${err.start.column}`)))} - - ${bold(red(`𝘅 ${err.message}`))} - -${frame} -` - ); -} - -// A default logger for when too lazy to pass LogOptions around. -export const logger = { - debug: debug.bind(null, defaultLogOptions), - info: info.bind(null, defaultLogOptions), - warn: warn.bind(null, defaultLogOptions), - error: error.bind(null, defaultLogOptions), -}; - -// For silencing libraries that go directly to console.warn -export function trapWarn(cb: (...args: any[]) => void = () =>{}) { - const warn = console.warn; - console.warn = function(...args: any[]) { - cb(...args); - }; - return () => console.warn = warn; -}
\ No newline at end of file |