summaryrefslogtreecommitdiff
path: root/src/logger.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/logger.ts')
-rw-r--r--src/logger.ts51
1 files changed, 26 insertions, 25 deletions
diff --git a/src/logger.ts b/src/logger.ts
index dccc3e85e..4bdac162a 100644
--- a/src/logger.ts
+++ b/src/logger.ts
@@ -1,31 +1,32 @@
import type { CompileError } from './compiler/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
+ 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']) {
+ if (levels[event.level] < levels['error']) {
dest = process.stdout;
}
let type = event.type;
- if(event.level === 'info') {
+ if (event.level === 'info') {
type = bold(blue(type));
- } else if(event.level === 'error') {
+ } else if (event.level === 'error') {
type = bold(red(type));
}
dest.write(`[${type}] `);
- dest.write(event.message);
+ dest.write(utilFormat(...event.args));
dest.write('\n');
callback();
- }
+ },
});
interface LogWritable<T> extends Writable {
@@ -37,18 +38,19 @@ export type LoggerEvent = 'debug' | 'info' | 'warn' | 'error';
export interface LogOptions {
dest: LogWritable<LogMessage>;
- level: LoggerLevel
+ level: LoggerLevel;
}
export const defaultLogOptions: LogOptions = {
dest: defaultLogDestination,
- level: 'info'
+ level: 'info',
};
export interface LogMessage {
type: string;
- level: LoggerLevel,
+ level: LoggerLevel;
message: string;
+ args: Array<any>;
}
const levels: Record<LoggerLevel, number> = {
@@ -59,19 +61,14 @@ const levels: Record<LoggerLevel, number> = {
silent: 90,
};
-export function log(opts: LogOptions = defaultLogOptions, level: LoggerLevel, type: string, ...messages: Array<any>) {
- let event: LogMessage = {
+export function log(opts: LogOptions = defaultLogOptions, level: LoggerLevel, type: string, ...args: Array<any>) {
+ const event: LogMessage = {
type,
level,
- message: ''
+ args,
+ message: '',
};
- if(messages.length === 1 && typeof messages[0] === 'object') {
- Object.assign(event, messages[0]);
- } else {
- event.message = messages.join(' ');
- }
-
// test if this level is enabled or not
if (levels[opts.level] > levels[level]) {
return; // do nothing
@@ -99,20 +96,24 @@ export function error(opts: LogOptions, type: string, ...messages: Array<any>) {
export function parseError(opts: LogOptions, err: CompileError) {
let frame = err.frame
// Switch colons for pipes
- .replace(/^([0-9]+)(:)/mg, `${bold('$1')} │`)
+ .replace(/^([0-9]+)(:)/gm, `${bold('$1')} │`)
// Make the caret red.
- .replace(/(?<=^\s+)(\^)/mg, bold(red(' ^')))
+ .replace(/(?<=^\s+)(\^)/gm, bold(red(' ^')))
// Add identation
- .replace(/^/mg, ' ');
+ .replace(/^/gm, ' ');
- error(opts, 'parse-error', `
+ 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.
@@ -120,5 +121,5 @@ export const logger = {
debug: debug.bind(null, defaultLogOptions),
info: info.bind(null, defaultLogOptions),
warn: warn.bind(null, defaultLogOptions),
- error: error.bind(null, defaultLogOptions)
-}; \ No newline at end of file
+ error: error.bind(null, defaultLogOptions),
+};