UNPKG

1.92 kBPlain TextView Raw
1
2import * as cluster from 'cluster';
3import * as core from '@akala/core'
4
5let customOutputs = ['error', 'warn', 'verbose', 'debug', 'info']
6
7export interface Logger
8{
9 error?: debug.IDebugger,
10 warn?: debug.IDebugger,
11 verbose?: debug.IDebugger,
12 debug?: debug.IDebugger,
13 info?: debug.IDebugger,
14 [key: string]: debug.IDebugger
15}
16
17export var logger: Logger & ((rootNamespace: string) => Logger) = <any>new Proxy(function (rootNamespace: string): Logger
18{
19 return new Proxy({}, {
20 get: function (target, prop)
21 {
22 if (!Reflect.has(target, prop) && typeof (prop) == 'string')
23 target[prop] = log(prop + ':' + rootNamespace);
24 return Reflect.get(target, prop);
25 }
26 })
27}, {
28 get: function (target, prop)
29 {
30 if (!Reflect.has(target, prop) && typeof (prop) == 'string')
31 target[prop] = log(prop);
32 return Reflect.get(target, prop);
33 }
34});
35
36export function log(namespace: string): debug.Debugger
37{
38 if (!cluster.isMaster)
39 {
40 var customOutput = customOutputs.find(o => namespace.startsWith(o + ':'));
41 if (customOutput)
42 namespace = namespace.substring((customOutput + ':').length);
43
44 customOutput = customOutput || customOutputs.find(o => namespace == o);
45
46 var moduleNamespace = process.argv[2].replace(/[@\/]/g, ':');
47 if (moduleNamespace[0] == ':')
48 moduleNamespace = moduleNamespace.substring(1);
49 if (customOutput)
50 {
51 if (namespace == moduleNamespace || customOutput == namespace)
52 namespace = moduleNamespace = customOutput + ':' + moduleNamespace;
53 else
54 moduleNamespace = customOutput + ':' + moduleNamespace;
55 }
56 if (!namespace.startsWith(moduleNamespace))
57 namespace = moduleNamespace + ':' + namespace;
58 }
59 return core.log(namespace);
60}
\No newline at end of file