|
|
|
|
|
|
|
|
|
const tty = require('tty'); |
|
const util = require('util'); |
|
|
|
|
|
|
|
|
|
|
|
exports.init = init; |
|
exports.log = log; |
|
exports.formatArgs = formatArgs; |
|
exports.save = save; |
|
exports.load = load; |
|
exports.useColors = useColors; |
|
exports.destroy = util.deprecate( |
|
() => {}, |
|
'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' |
|
); |
|
|
|
|
|
|
|
|
|
|
|
exports.colors = [6, 2, 3, 4, 5, 1]; |
|
|
|
try { |
|
|
|
|
|
const supportsColor = require('supports-color'); |
|
|
|
if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { |
|
exports.colors = [ |
|
20, |
|
21, |
|
26, |
|
27, |
|
32, |
|
33, |
|
38, |
|
39, |
|
40, |
|
41, |
|
42, |
|
43, |
|
44, |
|
45, |
|
56, |
|
57, |
|
62, |
|
63, |
|
68, |
|
69, |
|
74, |
|
75, |
|
76, |
|
77, |
|
78, |
|
79, |
|
80, |
|
81, |
|
92, |
|
93, |
|
98, |
|
99, |
|
112, |
|
113, |
|
128, |
|
129, |
|
134, |
|
135, |
|
148, |
|
149, |
|
160, |
|
161, |
|
162, |
|
163, |
|
164, |
|
165, |
|
166, |
|
167, |
|
168, |
|
169, |
|
170, |
|
171, |
|
172, |
|
173, |
|
178, |
|
179, |
|
184, |
|
185, |
|
196, |
|
197, |
|
198, |
|
199, |
|
200, |
|
201, |
|
202, |
|
203, |
|
204, |
|
205, |
|
206, |
|
207, |
|
208, |
|
209, |
|
214, |
|
215, |
|
220, |
|
221 |
|
]; |
|
} |
|
} catch (error) { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exports.inspectOpts = Object.keys(process.env).filter(key => { |
|
return /^debug_/i.test(key); |
|
}).reduce((obj, key) => { |
|
|
|
const prop = key |
|
.substring(6) |
|
.toLowerCase() |
|
.replace(/_([a-z])/g, (_, k) => { |
|
return k.toUpperCase(); |
|
}); |
|
|
|
|
|
let val = process.env[key]; |
|
if (/^(yes|on|true|enabled)$/i.test(val)) { |
|
val = true; |
|
} else if (/^(no|off|false|disabled)$/i.test(val)) { |
|
val = false; |
|
} else if (val === 'null') { |
|
val = null; |
|
} else { |
|
val = Number(val); |
|
} |
|
|
|
obj[prop] = val; |
|
return obj; |
|
}, {}); |
|
|
|
|
|
|
|
|
|
|
|
function useColors() { |
|
return 'colors' in exports.inspectOpts ? |
|
Boolean(exports.inspectOpts.colors) : |
|
tty.isatty(process.stderr.fd); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function formatArgs(args) { |
|
const {namespace: name, useColors} = this; |
|
|
|
if (useColors) { |
|
const c = this.color; |
|
const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); |
|
const prefix = ` ${colorCode};1m${name} \u001B[0m`; |
|
|
|
args[0] = prefix + args[0].split('\n').join('\n' + prefix); |
|
args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); |
|
} else { |
|
args[0] = getDate() + name + ' ' + args[0]; |
|
} |
|
} |
|
|
|
function getDate() { |
|
if (exports.inspectOpts.hideDate) { |
|
return ''; |
|
} |
|
return new Date().toISOString() + ' '; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
function log(...args) { |
|
return process.stderr.write(util.format(...args) + '\n'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function save(namespaces) { |
|
if (namespaces) { |
|
process.env.DEBUG = namespaces; |
|
} else { |
|
|
|
|
|
delete process.env.DEBUG; |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function load() { |
|
return process.env.DEBUG; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function init(debug) { |
|
debug.inspectOpts = {}; |
|
|
|
const keys = Object.keys(exports.inspectOpts); |
|
for (let i = 0; i < keys.length; i++) { |
|
debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; |
|
} |
|
} |
|
|
|
module.exports = require('./common')(exports); |
|
|
|
const {formatters} = module.exports; |
|
|
|
|
|
|
|
|
|
|
|
formatters.o = function (v) { |
|
this.inspectOpts.colors = this.useColors; |
|
return util.inspect(v, this.inspectOpts) |
|
.split('\n') |
|
.map(str => str.trim()) |
|
.join(' '); |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
formatters.O = function (v) { |
|
this.inspectOpts.colors = this.useColors; |
|
return util.inspect(v, this.inspectOpts); |
|
}; |
|
|