summaryrefslogtreecommitdiff
path: root/packages/frontend-builder/logger.ts
blob: c6198823801598e9b9f72d8fb32663986e76f7e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
 * SPDX-FileCopyrightText: syuilo and misskey-project
 * SPDX-License-Identifier: AGPL-3.0-only
 */

import * as process from 'node:process';

const debug = process.env.BUILDER_DEBUG !== undefined && process.env.BUILDER_DEBUG !== '0';

export interface Logger {
	debug(message: string): void;

	warn(message: string): void;

	error(message: string): void;

	info(message: string): void;

	prefixed(newPrefix: string): Logger;
}

interface RootLogger extends Logger {
	warningCount: number;
	errorCount: number;
}

export function createLogger(): RootLogger {
	return loggerFactory('', {
		warningCount: 0,
		errorCount: 0,
	});
}

type LogContext = {
	warningCount: number;
	errorCount: number;
};

function loggerFactory(prefix: string, context: LogContext): RootLogger {
	return {
		debug: (message: string) => {
			if (debug) console.log(`[DBG] ${prefix}${message}`);
		},
		warn: (message: string) => {
			context.warningCount++;
			console.log(`${debug ? '[WRN]' : 'w:'} ${prefix}${message}`);
		},
		error: (message: string) => {
			context.errorCount++;
			console.error(`${debug ? '[ERR]' : 'e:'} ${prefix}${message}`);
		},
		info: (message: string) => {
			console.error(`${debug ? '[INF]' : 'i:'} ${prefix}${message}`);
		},
		prefixed: (newPrefix: string) => {
			return loggerFactory(`${prefix}${newPrefix}`, context);
		},
		get warningCount() {
			return context.warningCount;
		},
		get errorCount() {
			return context.errorCount;
		},
	};
}

export const blankLogger: Logger = {
	debug: () => void 0,
	warn: () => void 0,
	error: () => void 0,
	info: () => void 0,
	prefixed: () => blankLogger,
};