debug
Advanced tools
Comparing version 3.1.0 to 3.2.0
{ | ||
"name": "debug", | ||
"version": "3.1.0", | ||
"version": "3.2.0", | ||
"repository": { | ||
@@ -14,2 +14,8 @@ "type": "git", | ||
], | ||
"files": [ | ||
"src", | ||
"dist/debug.js", | ||
"LICENSE", | ||
"README.md" | ||
], | ||
"author": "TJ Holowaychuk <tj@vision-media.ca>", | ||
@@ -22,21 +28,21 @@ "contributors": [ | ||
"dependencies": { | ||
"ms": "2.0.0" | ||
"ms": "^2.1.1" | ||
}, | ||
"devDependencies": { | ||
"@babel/cli": "^7.0.0", | ||
"@babel/core": "^7.0.0", | ||
"@babel/preset-env": "^7.0.0", | ||
"browserify": "14.4.0", | ||
"chai": "^3.5.0", | ||
"concurrently": "^3.1.0", | ||
"coveralls": "^2.11.15", | ||
"eslint": "^3.12.1", | ||
"coveralls": "^3.0.2", | ||
"istanbul": "^0.4.5", | ||
"karma": "^1.3.0", | ||
"karma": "^3.0.0", | ||
"karma-chai": "^0.1.0", | ||
"karma-mocha": "^1.3.0", | ||
"karma-phantomjs-launcher": "^1.0.2", | ||
"karma-sinon": "^1.0.5", | ||
"mocha": "^3.2.0", | ||
"mocha": "^5.2.0", | ||
"mocha-lcov-reporter": "^1.2.0", | ||
"rimraf": "^2.5.4", | ||
"sinon": "^1.17.6", | ||
"sinon-chai": "^2.8.0" | ||
"xo": "^0.23.0" | ||
}, | ||
@@ -43,0 +49,0 @@ "main": "./src/index.js", |
@@ -73,4 +73,6 @@ # debug | ||
#### Windows note | ||
#### Windows command prompt notes | ||
##### CMD | ||
On Windows the environment variable is set using the `set` command. | ||
@@ -82,10 +84,28 @@ | ||
Note that PowerShell uses different syntax to set environment variables. | ||
Example: | ||
```cmd | ||
set DEBUG=* & node app.js | ||
``` | ||
##### PowerShell (VS Code default) | ||
PowerShell uses different syntax to set environment variables. | ||
```cmd | ||
$env:DEBUG = "*,-not_this" | ||
``` | ||
Example: | ||
```cmd | ||
$env:DEBUG='app';node app.js | ||
``` | ||
Then, run the program to be debugged as usual. | ||
npm script example: | ||
```js | ||
"windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js", | ||
``` | ||
@@ -253,2 +273,51 @@ ## Namespace Colors | ||
## Extend | ||
You can simply extend debugger | ||
```js | ||
const log = require('debug')('auth'); | ||
//creates new debug instance with extended namespace | ||
const logSign = log.extend('sign'); | ||
const logLogin = log.extend('login'); | ||
log('hello'); // auth hello | ||
logSign('hello'); //auth:sign hello | ||
logLogin('hello'); //auth:login hello | ||
``` | ||
## Set dynamically | ||
You can also enable debug dynamically by calling the `enable()` method : | ||
```js | ||
let debug = require('debug'); | ||
console.log(1, debug.enabled('test')); | ||
debug.enable('test'); | ||
console.log(2, debug.enabled('test')); | ||
debug.disable(); | ||
console.log(3, debug.enabled('test')); | ||
``` | ||
print : | ||
``` | ||
1 false | ||
2 true | ||
3 false | ||
``` | ||
Usage : | ||
`enable(namespaces)` | ||
`namespaces` can include modes separated by a colon and wildcards. | ||
Note that calling `enable()` completely overrides previously set DEBUG variable : | ||
``` | ||
$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' | ||
=> false | ||
``` | ||
## Checking whether a debug target is enabled | ||
@@ -255,0 +324,0 @@ |
@@ -0,8 +1,7 @@ | ||
/* eslint-env browser */ | ||
/** | ||
* This is the web browser implementation of `debug()`. | ||
* | ||
* Expose `debug()` as the module. | ||
*/ | ||
exports = module.exports = require('./debug'); | ||
exports.log = log; | ||
@@ -13,6 +12,3 @@ exports.formatArgs = formatArgs; | ||
exports.useColors = useColors; | ||
exports.storage = 'undefined' != typeof chrome | ||
&& 'undefined' != typeof chrome.storage | ||
? chrome.storage.local | ||
: localstorage(); | ||
exports.storage = localstorage(); | ||
@@ -24,13 +20,78 @@ /** | ||
exports.colors = [ | ||
'#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', | ||
'#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', | ||
'#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', | ||
'#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', | ||
'#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', | ||
'#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', | ||
'#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', | ||
'#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', | ||
'#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', | ||
'#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', | ||
'#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33' | ||
'#0000CC', | ||
'#0000FF', | ||
'#0033CC', | ||
'#0033FF', | ||
'#0066CC', | ||
'#0066FF', | ||
'#0099CC', | ||
'#0099FF', | ||
'#00CC00', | ||
'#00CC33', | ||
'#00CC66', | ||
'#00CC99', | ||
'#00CCCC', | ||
'#00CCFF', | ||
'#3300CC', | ||
'#3300FF', | ||
'#3333CC', | ||
'#3333FF', | ||
'#3366CC', | ||
'#3366FF', | ||
'#3399CC', | ||
'#3399FF', | ||
'#33CC00', | ||
'#33CC33', | ||
'#33CC66', | ||
'#33CC99', | ||
'#33CCCC', | ||
'#33CCFF', | ||
'#6600CC', | ||
'#6600FF', | ||
'#6633CC', | ||
'#6633FF', | ||
'#66CC00', | ||
'#66CC33', | ||
'#9900CC', | ||
'#9900FF', | ||
'#9933CC', | ||
'#9933FF', | ||
'#99CC00', | ||
'#99CC33', | ||
'#CC0000', | ||
'#CC0033', | ||
'#CC0066', | ||
'#CC0099', | ||
'#CC00CC', | ||
'#CC00FF', | ||
'#CC3300', | ||
'#CC3333', | ||
'#CC3366', | ||
'#CC3399', | ||
'#CC33CC', | ||
'#CC33FF', | ||
'#CC6600', | ||
'#CC6633', | ||
'#CC9900', | ||
'#CC9933', | ||
'#CCCC00', | ||
'#CCCC33', | ||
'#FF0000', | ||
'#FF0033', | ||
'#FF0066', | ||
'#FF0099', | ||
'#FF00CC', | ||
'#FF00FF', | ||
'#FF3300', | ||
'#FF3333', | ||
'#FF3366', | ||
'#FF3399', | ||
'#FF33CC', | ||
'#FF33FF', | ||
'#FF6600', | ||
'#FF6633', | ||
'#FF9900', | ||
'#FF9933', | ||
'#FFCC00', | ||
'#FFCC33' | ||
]; | ||
@@ -46,41 +107,29 @@ | ||
// eslint-disable-next-line complexity | ||
function useColors() { | ||
// NB: In an Electron preload script, document will be defined but not fully | ||
// initialized. Since we know we're in Chrome, we'll just detect this case | ||
// explicitly | ||
if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { | ||
return true; | ||
} | ||
// NB: In an Electron preload script, document will be defined but not fully | ||
// initialized. Since we know we're in Chrome, we'll just detect this case | ||
// explicitly | ||
if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { | ||
return true; | ||
} | ||
// Internet Explorer and Edge do not support colors. | ||
if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { | ||
return false; | ||
} | ||
// Internet Explorer and Edge do not support colors. | ||
if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { | ||
return false; | ||
} | ||
// is webkit? http://stackoverflow.com/a/16459606/376773 | ||
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 | ||
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || | ||
// is firebug? http://stackoverflow.com/a/398120/376773 | ||
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || | ||
// is firefox >= v31? | ||
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages | ||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || | ||
// double check webkit in userAgent just in case we are in a worker | ||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); | ||
// Is webkit? http://stackoverflow.com/a/16459606/376773 | ||
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 | ||
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || | ||
// Is firebug? http://stackoverflow.com/a/398120/376773 | ||
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || | ||
// Is firefox >= v31? | ||
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages | ||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || | ||
// Double check webkit in userAgent just in case we are in a worker | ||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); | ||
} | ||
/** | ||
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. | ||
*/ | ||
exports.formatters.j = function(v) { | ||
try { | ||
return JSON.stringify(v); | ||
} catch (err) { | ||
return '[UnexpectedJSONParseError]: ' + err.message; | ||
} | ||
}; | ||
/** | ||
* Colorize log arguments if enabled. | ||
@@ -92,32 +141,34 @@ * | ||
function formatArgs(args) { | ||
var useColors = this.useColors; | ||
args[0] = (this.useColors ? '%c' : '') + | ||
this.namespace + | ||
(this.useColors ? ' %c' : ' ') + | ||
args[0] + | ||
(this.useColors ? '%c ' : ' ') + | ||
'+' + module.exports.humanize(this.diff); | ||
args[0] = (useColors ? '%c' : '') | ||
+ this.namespace | ||
+ (useColors ? ' %c' : ' ') | ||
+ args[0] | ||
+ (useColors ? '%c ' : ' ') | ||
+ '+' + exports.humanize(this.diff); | ||
if (!this.useColors) { | ||
return; | ||
} | ||
if (!useColors) return; | ||
const c = 'color: ' + this.color; | ||
args.splice(1, 0, c, 'color: inherit'); | ||
var c = 'color: ' + this.color; | ||
args.splice(1, 0, c, 'color: inherit') | ||
// The final "%c" is somewhat tricky, because there could be other | ||
// arguments passed either before or after the %c, so we need to | ||
// figure out the correct index to insert the CSS into | ||
let index = 0; | ||
let lastC = 0; | ||
args[0].replace(/%[a-zA-Z%]/g, match => { | ||
if (match === '%%') { | ||
return; | ||
} | ||
index++; | ||
if (match === '%c') { | ||
// We only are interested in the *last* %c | ||
// (the user may have provided their own) | ||
lastC = index; | ||
} | ||
}); | ||
// the final "%c" is somewhat tricky, because there could be other | ||
// arguments passed either before or after the %c, so we need to | ||
// figure out the correct index to insert the CSS into | ||
var index = 0; | ||
var lastC = 0; | ||
args[0].replace(/%[a-zA-Z%]/g, function(match) { | ||
if ('%%' === match) return; | ||
index++; | ||
if ('%c' === match) { | ||
// we only are interested in the *last* %c | ||
// (the user may have provided their own) | ||
lastC = index; | ||
} | ||
}); | ||
args.splice(lastC, 0, c); | ||
args.splice(lastC, 0, c); | ||
} | ||
@@ -131,9 +182,8 @@ | ||
*/ | ||
function log() { | ||
// this hackery is required for IE8/9, where | ||
// the `console.log` function doesn't have 'apply' | ||
return 'object' === typeof console | ||
&& console.log | ||
&& Function.prototype.apply.call(console.log, console, arguments); | ||
function log(...args) { | ||
// This hackery is required for IE8/9, where | ||
// the `console.log` function doesn't have 'apply' | ||
return typeof console === 'object' && | ||
console.log && | ||
console.log(...args); | ||
} | ||
@@ -147,11 +197,13 @@ | ||
*/ | ||
function save(namespaces) { | ||
try { | ||
if (null == namespaces) { | ||
exports.storage.removeItem('debug'); | ||
} else { | ||
exports.storage.debug = namespaces; | ||
} | ||
} catch(e) {} | ||
try { | ||
if (namespaces) { | ||
exports.storage.setItem('debug', namespaces); | ||
} else { | ||
exports.storage.removeItem('debug'); | ||
} | ||
} catch (error) { | ||
// Swallow | ||
// XXX (@Qix-) should we be logging these? | ||
} | ||
} | ||
@@ -165,24 +217,20 @@ | ||
*/ | ||
function load() { | ||
var r; | ||
try { | ||
r = exports.storage.debug; | ||
} catch(e) {} | ||
let r; | ||
try { | ||
r = exports.storage.getItem('debug'); | ||
} catch (error) { | ||
// Swallow | ||
// XXX (@Qix-) should we be logging these? | ||
} | ||
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG | ||
if (!r && typeof process !== 'undefined' && 'env' in process) { | ||
r = process.env.DEBUG; | ||
} | ||
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG | ||
if (!r && typeof process !== 'undefined' && 'env' in process) { | ||
r = process.env.DEBUG; | ||
} | ||
return r; | ||
return r; | ||
} | ||
/** | ||
* Enable namespaces listed in `localStorage.debug` initially. | ||
*/ | ||
exports.enable(load()); | ||
/** | ||
* Localstorage attempts to return the localstorage. | ||
@@ -199,5 +247,26 @@ * | ||
function localstorage() { | ||
try { | ||
return window.localStorage; | ||
} catch (e) {} | ||
try { | ||
// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context | ||
// The Browser also has localStorage in the global context. | ||
return localStorage; | ||
} catch (error) { | ||
// Swallow | ||
// XXX (@Qix-) should we be logging these? | ||
} | ||
} | ||
module.exports = require('./common')(exports); | ||
const {formatters} = module.exports; | ||
/** | ||
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. | ||
*/ | ||
formatters.j = function (v) { | ||
try { | ||
return JSON.stringify(v); | ||
} catch (error) { | ||
return '[UnexpectedJSONParseError]: ' + error.message; | ||
} | ||
}; |
/** | ||
* Detect Electron renderer process, which is node, but we should | ||
* Detect Electron renderer / nwjs process, which is node, but we should | ||
* treat as a browser. | ||
*/ | ||
if (typeof process === 'undefined' || process.type === 'renderer') { | ||
module.exports = require('./browser.js'); | ||
if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { | ||
module.exports = require('./browser.js'); | ||
} else { | ||
module.exports = require('./node.js'); | ||
module.exports = require('./node.js'); | ||
} |
257
src/node.js
@@ -5,12 +5,9 @@ /** | ||
var tty = require('tty'); | ||
var util = require('util'); | ||
const tty = require('tty'); | ||
const util = require('util'); | ||
/** | ||
* This is the Node.js implementation of `debug()`. | ||
* | ||
* Expose `debug()` as the module. | ||
*/ | ||
exports = module.exports = require('./debug'); | ||
exports.init = init; | ||
@@ -27,17 +24,91 @@ exports.log = log; | ||
exports.colors = [ 6, 2, 3, 4, 5, 1 ]; | ||
exports.colors = [6, 2, 3, 4, 5, 1]; | ||
try { | ||
var supportsColor = require('supports-color'); | ||
if (supportsColor && 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 (err) { | ||
// swallow - we only care if `supports-color` is available; it doesn't have to be. | ||
// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) | ||
// eslint-disable-next-line import/no-extraneous-dependencies | ||
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) { | ||
// Swallow - we only care if `supports-color` is available; it doesn't have to be. | ||
} | ||
@@ -51,20 +122,27 @@ | ||
exports.inspectOpts = Object.keys(process.env).filter(function (key) { | ||
return /^debug_/i.test(key); | ||
}).reduce(function (obj, key) { | ||
// camel-case | ||
var prop = key | ||
.substring(6) | ||
.toLowerCase() | ||
.replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); | ||
exports.inspectOpts = Object.keys(process.env).filter(key => { | ||
return /^debug_/i.test(key); | ||
}).reduce((obj, key) => { | ||
// Camel-case | ||
const prop = key | ||
.substring(6) | ||
.toLowerCase() | ||
.replace(/_([a-z])/g, (_, k) => { | ||
return k.toUpperCase(); | ||
}); | ||
// coerce string value into JS value | ||
var 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); | ||
// Coerce string value into JS value | ||
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; | ||
obj[prop] = val; | ||
return obj; | ||
}, {}); | ||
@@ -77,29 +155,8 @@ | ||
function useColors() { | ||
return 'colors' in exports.inspectOpts | ||
? Boolean(exports.inspectOpts.colors) | ||
: tty.isatty(process.stderr.fd); | ||
return 'colors' in exports.inspectOpts ? | ||
Boolean(exports.inspectOpts.colors) : | ||
tty.isatty(process.stderr.fd); | ||
} | ||
/** | ||
* Map %o to `util.inspect()`, all on a single line. | ||
*/ | ||
exports.formatters.o = function(v) { | ||
this.inspectOpts.colors = this.useColors; | ||
return util.inspect(v, this.inspectOpts) | ||
.split('\n').map(function(str) { | ||
return str.trim() | ||
}).join(' '); | ||
}; | ||
/** | ||
* Map %o to `util.inspect()`, allowing multiple lines if needed. | ||
*/ | ||
exports.formatters.O = function(v) { | ||
this.inspectOpts.colors = this.useColors; | ||
return util.inspect(v, this.inspectOpts); | ||
}; | ||
/** | ||
* Adds ANSI color escape codes if enabled. | ||
@@ -111,23 +168,21 @@ * | ||
function formatArgs(args) { | ||
var name = this.namespace; | ||
var useColors = this.useColors; | ||
const {namespace: name, useColors} = this; | ||
if (useColors) { | ||
var c = this.color; | ||
var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c); | ||
var prefix = ' ' + colorCode + ';1m' + name + ' ' + '\u001b[0m'; | ||
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+' + exports.humanize(this.diff) + '\u001b[0m'); | ||
} else { | ||
args[0] = getDate() + name + ' ' + args[0]; | ||
} | ||
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 ''; | ||
} else { | ||
return new Date().toISOString() + ' '; | ||
} | ||
if (exports.inspectOpts.hideDate) { | ||
return ''; | ||
} | ||
return new Date().toISOString() + ' '; | ||
} | ||
@@ -139,4 +194,4 @@ | ||
function log() { | ||
return process.stderr.write(util.format.apply(util, arguments) + '\n'); | ||
function log(...args) { | ||
return process.stderr.write(util.format(...args) + '\n'); | ||
} | ||
@@ -150,11 +205,10 @@ | ||
*/ | ||
function save(namespaces) { | ||
if (null == namespaces) { | ||
// If you set a process.env field to null or undefined, it gets cast to the | ||
// string 'null' or 'undefined'. Just delete instead. | ||
delete process.env.DEBUG; | ||
} else { | ||
process.env.DEBUG = namespaces; | ||
} | ||
if (namespaces) { | ||
process.env.DEBUG = namespaces; | ||
} else { | ||
// If you set a process.env field to null or undefined, it gets cast to the | ||
// string 'null' or 'undefined'. Just delete instead. | ||
delete process.env.DEBUG; | ||
} | ||
} | ||
@@ -170,3 +224,3 @@ | ||
function load() { | ||
return process.env.DEBUG; | ||
return process.env.DEBUG; | ||
} | ||
@@ -181,15 +235,32 @@ | ||
function init (debug) { | ||
debug.inspectOpts = {}; | ||
function init(debug) { | ||
debug.inspectOpts = {}; | ||
var keys = Object.keys(exports.inspectOpts); | ||
for (var i = 0; i < keys.length; i++) { | ||
debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; | ||
} | ||
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; | ||
/** | ||
* Enable namespaces listed in `process.env.DEBUG` initially. | ||
* Map %o to `util.inspect()`, all on a single line. | ||
*/ | ||
exports.enable(load()); | ||
formatters.o = function (v) { | ||
this.inspectOpts.colors = this.useColors; | ||
return util.inspect(v, this.inspectOpts) | ||
.replace(/\s*\n\s*/g, ' '); | ||
}; | ||
/** | ||
* Map %O to `util.inspect()`, allowing multiple lines if needed. | ||
*/ | ||
formatters.O = function (v) { | ||
this.inspectOpts.colors = this.useColors; | ||
return util.inspect(v, this.inspectOpts); | ||
}; |
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
78567
1406
438
9
1
11
2