-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodifyConsole.ts
82 lines (72 loc) · 2.64 KB
/
modifyConsole.ts
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
74
75
76
77
78
79
80
81
82
import { deepClone, merge } from "sussy-util";
import { reset, text } from "./maps";
import defaults from "./defaults";
import Log from "./log";
import compile from "./compile";
export default (con = console, levels: Levels = {}, path: string | undefined = undefined, timestamp = true, label = true) => {
let mergedLevels: Levels = defaults;
Object.keys(levels).forEach(e => {
mergedLevels[e] = merge(mergedLevels[e], levels[e]);
});
let legacyLevelFormat: LegacyLevelFormat = new Array(Object.keys(mergedLevels).length);
let i = 0;
Object.keys(mergedLevels).forEach(e => {
// legacyLevelFormat[i].name = e;
// legacyLevelFormat[i].value = mergedLevels[e].value;
// legacyLevelFormat[i].color = mergedLevels[e].color;
// legacyLevelFormat[i].notIntoFile = mergedLevels[e].notIntoFile;
legacyLevelFormat[i] = {
name: e,
value: mergedLevels[e].value,
color: mergedLevels[e].color,
notIntoFile: mergedLevels[e].notIntoFile
};
i++;
});
mergedLevels = compile(legacyLevelFormat);
let logFile: Log | undefined;
if (path) logFile = new Log(path, 9);
Object.keys(mergedLevels.value).forEach(e => {
const element = e as keyof Console;
// @ts-ignore
if (!con[element]) con[element] = con.log;
const element2 = e as keyof Log;
// @ts-ignore
if (logFile && !logFile[element2]) logFile[element2] = function (...args: any[]) {
this.append(e.toLowerCase(), ...args);
};
});
const consoles = deepClone(con);
require("console-stamp")(consoles, {
format: `${timestamp ? ":date([HH:MM:ss.l])" : ""}${label && timestamp ? " " : ""}${label ? ":label(9)" : ""}`,
include: Object.keys(mergedLevels.value),
levels: mergedLevels.value
});
Object.keys(mergedLevels.value).forEach(e => {
// @ts-ignore
con[e] = (mergedLevels.notIntoFile[e] || !path) ? (...args) => {
// @ts-ignore
consoles[e](text[mergedLevels.color[e]], ...args, reset);
} : (...args: any[]) => {
// @ts-ignore
consoles[e](text[mergedLevels.color[e]], ...args, reset);
if (logFile)
// @ts-ignore
logFile[e](...args);
}
});
}
export interface Levels {
[key: string]: {
value?: number,
color?: string,
notIntoFile?: boolean
}
}
interface LegacyLevelValue {
name: string,
value: number | undefined;
color: string | undefined;
notIntoFile: boolean | undefined;
}
export type LegacyLevelFormat = LegacyLevelValue[];