From a45d4a0239f071634804dd7901dd33b0d0d407c9 Mon Sep 17 00:00:00 2001 From: Tim Ruffles Date: Thu, 15 Jun 2017 22:39:48 +0100 Subject: [PATCH 001/118] document .enabled flag (#465) Was added in #15, should be documented (e.g #423) --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index f67be6b3..15f2a17e 100644 --- a/README.md +++ b/README.md @@ -208,6 +208,18 @@ error('now goes to stdout via console.info'); log('still goes to stdout, but via console.info now'); ``` +## Checking whether a debug target is enabled + +Afer you've created a debug instance, you can check whether it is enabled by its `.enabled` property: + +```javascript +const debug = require('debug')('http'); + +if(debug.enabled) { + // ... +} +``` + ## Authors From da51af8314436ab532c151583f7fd52b2ebf2a3e Mon Sep 17 00:00:00 2001 From: Eirik Birkeland Date: Mon, 17 Jul 2017 18:45:45 +0200 Subject: [PATCH 002/118] Simplify and improve The browser version assumes that chrome.storage.local uses an API which is compatible with localStorage; which is not the case. Even though I am using chrome.storage.local for my Chrome extension, I would much prefer to keep debug's variable in localStorage, as I consider chrome.storage.local the 'private space' of my extension. This change obviates the need to support multiple storage types. But if storage type is important, how about supporting a custom storage facility, including chrome.storage.sync? I.e. the user would provide an object that follows the conventions. Just a thought - I certainly don't see the need at this point though. --- src/browser.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/browser.js b/src/browser.js index 71069249..3db740c2 100644 --- a/src/browser.js +++ b/src/browser.js @@ -10,10 +10,7 @@ exports.formatArgs = formatArgs; exports.save = save; exports.load = load; exports.useColors = useColors; -exports.storage = 'undefined' != typeof chrome - && 'undefined' != typeof chrome.storage - ? chrome.storage.local - : localstorage(); +exports.storage = localstorage(); /** * Colors. From 659ac0252cd3bba115b02a4545b752ac9dcc3064 Mon Sep 17 00:00:00 2001 From: "Mattias Kindborg @FantasticFiasco" Date: Fri, 4 Aug 2017 20:51:36 +0200 Subject: [PATCH 003/118] docs(readme): fix typo (#473) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 15f2a17e..441cbecd 100644 --- a/README.md +++ b/README.md @@ -210,7 +210,7 @@ log('still goes to stdout, but via console.info now'); ## Checking whether a debug target is enabled -Afer you've created a debug instance, you can check whether it is enabled by its `.enabled` property: +After you've created a debug instance, you can check whether it is enabled by its `.enabled` property: ```javascript const debug = require('debug')('http'); From ff432e76e98f4224917af75a2d2dd1057edff3ac Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 27 Dec 2016 16:25:36 -0800 Subject: [PATCH 004/118] Remove DEBUG_FD (#406) * remove DEBUG_FD Now simply uses `process.stderr`. Breaking API change, for the v3 branch. Previously used internal and undocumented Node.js APIs to support this underly used API. Fixes #280 Closes #386 * remove DEBUG_FD from readme --- src/node.js | 91 ++--------------------------------------------------- 1 file changed, 3 insertions(+), 88 deletions(-) diff --git a/src/node.js b/src/node.js index af612976..f4119f47 100644 --- a/src/node.js +++ b/src/node.js @@ -51,23 +51,6 @@ exports.inspectOpts = Object.keys(process.env).filter(function (key) { return obj; }, {}); -/** - * The file descriptor to write the `debug()` calls to. - * Set the `DEBUG_FD` env variable to override with another value. i.e.: - * - * $ DEBUG_FD=3 node script.js 3>debug.log - */ - -var fd = parseInt(process.env.DEBUG_FD, 10) || 2; - -if (1 !== fd && 2 !== fd) { - util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')() -} - -var stream = 1 === fd ? process.stdout : - 2 === fd ? process.stderr : - createWritableStdioStream(fd); - /** * Is stdout a TTY? Colored output is enabled when `true`. */ @@ -75,7 +58,7 @@ var stream = 1 === fd ? process.stdout : function useColors() { return 'colors' in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) - : tty.isatty(fd); + : tty.isatty(process.stderr.fd); } /** @@ -120,11 +103,11 @@ function formatArgs(args) { } /** - * Invokes `util.format()` with the specified arguments and writes to `stream`. + * Invokes `util.format()` with the specified arguments and writes to stderr. */ function log() { - return stream.write(util.format.apply(util, arguments) + '\n'); + return process.stderr.write(util.format.apply(util, arguments) + '\n'); } /** @@ -155,74 +138,6 @@ function load() { return process.env.DEBUG; } -/** - * Copied from `node/src/node.js`. - * - * XXX: It's lame that node doesn't expose this API out-of-the-box. It also - * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. - */ - -function createWritableStdioStream (fd) { - var stream; - var tty_wrap = process.binding('tty_wrap'); - - // Note stream._type is used for test-module-load-list.js - - switch (tty_wrap.guessHandleType(fd)) { - case 'TTY': - stream = new tty.WriteStream(fd); - stream._type = 'tty'; - - // Hack to have stream not keep the event loop alive. - // See https://github.com/joyent/node/issues/1726 - if (stream._handle && stream._handle.unref) { - stream._handle.unref(); - } - break; - - case 'FILE': - var fs = require('fs'); - stream = new fs.SyncWriteStream(fd, { autoClose: false }); - stream._type = 'fs'; - break; - - case 'PIPE': - case 'TCP': - var net = require('net'); - stream = new net.Socket({ - fd: fd, - readable: false, - writable: true - }); - - // FIXME Should probably have an option in net.Socket to create a - // stream from an existing fd which is writable only. But for now - // we'll just add this hack and set the `readable` member to false. - // Test: ./node test/fixtures/echo.js < /etc/passwd - stream.readable = false; - stream.read = null; - stream._type = 'pipe'; - - // FIXME Hack to have stream not keep the event loop alive. - // See https://github.com/joyent/node/issues/1726 - if (stream._handle && stream._handle.unref) { - stream._handle.unref(); - } - break; - - default: - // Probably an error on in uv_guess_handle() - throw new Error('Implement me. Unknown stream file type!'); - } - - // For supporting legacy API we put the FD here. - stream.fd = fd; - - stream._isStdio = true; - - return stream; -} - /** * Init logic for `debug` instances. * From 9d7c997992416bc9b358aaa5aa9e9396bab54baa Mon Sep 17 00:00:00 2001 From: George Joseph Date: Wed, 4 Jan 2017 12:59:29 -0700 Subject: [PATCH 005/118] Make millisecond timer namespace specific and allow 'always enabled' output (#408) * Make millisecond timer namespace specific When debugging node apps, I find it much more useful for the millisecond timer to be relative to last message from the same namespace instead of any message. This is especially true when I'm debugging across multiple libraries or multiple levels in the same module and I'm interested in seeing all the messages but also need to compare times from specific levels. * Enable 'always enabled' output Having to deal with 2 different logging mechanisms, one for debugging and one for normal output, can be a nuisance. It would be much easier to always use the same facility and semantics for both. This patch allows an 'always enabled' namespace to be specified by appending a single '*' to the namespace name. var alwaysOn = require('debug')('normal:messages*'); alwaysOn('This will always display regardless of DEBUG'); --- README.md | 2 +- src/debug.js | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 441cbecd..3748db94 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ Then, run the program to be debugged as usual. ## Conventions - If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". + If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. ## Wildcards diff --git a/src/debug.js b/src/debug.js index 6a5e3fc9..ee31a398 100644 --- a/src/debug.js +++ b/src/debug.js @@ -28,12 +28,6 @@ exports.skips = []; exports.formatters = {}; -/** - * Previous log timestamp. - */ - -var prevTime; - /** * Select a color. * @param {String} namespace @@ -62,6 +56,8 @@ function selectColor(namespace) { function createDebug(namespace) { + var prevTime; + function debug() { // disabled? if (!debug.enabled) return; @@ -174,6 +170,9 @@ function disable() { */ function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } var i, len; for (i = 0, len = exports.skips.length; i < len; i++) { if (exports.skips[i].test(name)) { From bf88540737e3908eeac253ffd2bbde0b46d5b56d Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Wed, 12 Apr 2017 13:25:31 -0700 Subject: [PATCH 006/118] `enabled()` updates existing debug instances, add `destroy()` function (#440) * dynamically updatable instances * add a `destroy()` function to debug instances So that "dynamically created instances" can clean up after themselves --- src/debug.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/debug.js b/src/debug.js index ee31a398..ed2956d6 100644 --- a/src/debug.js +++ b/src/debug.js @@ -13,6 +13,11 @@ exports.enable = enable; exports.enabled = enabled; exports.humanize = require('ms'); +/** + * Active `debug` instances. + */ +exports.instances = []; + /** * The currently active debug mode names, and names to skip. */ @@ -114,15 +119,23 @@ function createDebug(namespace) { debug.enabled = exports.enabled(namespace); debug.useColors = exports.useColors(); debug.color = selectColor(namespace); + debug.destroy = destroy; // env-specific initialization logic for debug instances if ('function' === typeof exports.init) { exports.init(debug); } + exports.instances.push(debug); + return debug; } +function destroy () { + const index = exports.instances.indexOf(this) + exports.instances.splice(index, 1) +} + /** * Enables a debug mode by namespaces. This can include modes * separated by a colon and wildcards. @@ -149,6 +162,11 @@ function enable(namespaces) { exports.names.push(new RegExp('^' + namespaces + '$')); } } + + for (var i = 0; i < exports.instances.length; i++) { + var instance = exports.instances[i]; + instance.enabled = exports.enabled(instance.namespace); + } } /** From d5854f4eb6868c3d424091648ab92a3575b0b55e Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 7 Aug 2017 21:51:55 -0700 Subject: [PATCH 007/118] support 256 colors Closes #481. --- src/node.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/node.js b/src/node.js index f4119f47..bc3d8d0d 100644 --- a/src/node.js +++ b/src/node.js @@ -25,6 +25,23 @@ exports.useColors = useColors; 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, 46, 47, 48, + 49, 50, 51, 56, 57, 62, 63, 68, 69, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 92, 93, 98, 99, 112, 113, 118, 119, 128, 129, + 134, 135, 148, 149, 154, 155, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 178, 179, 184, 185, 190, 191, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 214, 215, + 220, 221, 226, 227 + ]; + } +} catch (err) { + // swallow - we only care if `supports-color` is available; it doesn't have to be. +} + /** * Build up the default `inspectOpts` object from the environment variables. * @@ -92,10 +109,11 @@ function formatArgs(args) { if (useColors) { var c = this.color; - var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m'; + var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c); + var prefix = ' ' + colorCode + ';1m' + name + ' ' + '\u001b[0m'; args[0] = prefix + args[0].split('\n').join('\n' + prefix); - args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); + args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); } else { args[0] = new Date().toUTCString() + ' ' + name + ' ' + args[0]; From 39eb2770a2ae2e9cd51356d2f6324616484274c3 Mon Sep 17 00:00:00 2001 From: "antoine.leveugle" Date: Sun, 29 Jan 2017 17:10:42 +0100 Subject: [PATCH 008/118] Use Date#toISOString() instead to Date#toUTCString() when output is not a TTY Easier to parse programatically and contains milliseconds. Closes #418. --- README.md | 2 +- src/node.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3748db94..bca8417e 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Then, run the program to be debugged as usual. ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) - When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: + When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) diff --git a/src/node.js b/src/node.js index bc3d8d0d..ae556fc0 100644 --- a/src/node.js +++ b/src/node.js @@ -115,7 +115,7 @@ function formatArgs(args) { args[0] = prefix + args[0].split('\n').join('\n' + prefix); args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); } else { - args[0] = new Date().toUTCString() + args[0] = new Date().toISOString() + ' ' + name + ' ' + args[0]; } } From 826fd94639efeaa3c5701b50d335caead084a5d6 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 11:46:13 -0700 Subject: [PATCH 009/118] update "browserify" to v14.4.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index df863517..bad6f09b 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "ms": "2.0.0" }, "devDependencies": { - "browserify": "9.0.3", + "browserify": "14.4.0", "chai": "^3.5.0", "concurrently": "^3.1.0", "coveralls": "^2.11.15", From cefbd07bd8168a0352f858129562fb9d480b76b2 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 11:54:27 -0700 Subject: [PATCH 010/118] update `make lint` --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 584da8bf..304b6a5e 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ node_modules: package.json @touch node_modules lint: .FORCE - eslint browser.js debug.js index.js node.js + eslint *.js src/*.js test-node: .FORCE istanbul cover node_modules/mocha/bin/_mocha -- test/**.js From 65192b755dcbaef9e958c28a70833e5bd6758264 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Tue, 8 Aug 2017 11:59:22 -0700 Subject: [PATCH 011/118] use contrast-bounded colors --- src/node.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/node.js b/src/node.js index ae556fc0..b85ec7e3 100644 --- a/src/node.js +++ b/src/node.js @@ -23,19 +23,17 @@ exports.useColors = useColors; * Colors. */ -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, 46, 47, 48, - 49, 50, 51, 56, 57, 62, 63, 68, 69, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 92, 93, 98, 99, 112, 113, 118, 119, 128, 129, - 134, 135, 148, 149, 154, 155, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 178, 179, 184, 185, 190, 191, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 214, 215, - 220, 221, 226, 227 + 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) { From 5ed41f6d92b639cdaa1b2e93fc4071886b5a82db Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 11:59:56 -0700 Subject: [PATCH 012/118] add Web Browser 256 colors Like #481, but for the web browser. --- src/browser.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/browser.js b/src/browser.js index 71069249..879aaa79 100644 --- a/src/browser.js +++ b/src/browser.js @@ -20,12 +20,17 @@ exports.storage = 'undefined' != typeof chrome */ exports.colors = [ - 'lightseagreen', - 'forestgreen', - 'goldenrod', - 'dodgerblue', - 'darkorchid', - 'crimson' + '#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' ]; /** From 02eb3c607e38d709b79701a0d0140da77b006bdf Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 12:01:01 -0700 Subject: [PATCH 013/118] fix lint --- src/debug.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/debug.js b/src/debug.js index ed2956d6..7c49039c 100644 --- a/src/debug.js +++ b/src/debug.js @@ -150,10 +150,11 @@ function enable(namespaces) { exports.names = []; exports.skips = []; + var i; var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); var len = split.length; - for (var i = 0; i < len; i++) { + for (i = 0; i < len; i++) { if (!split[i]) continue; // ignore empty strings namespaces = split[i].replace(/\*/g, '.*?'); if (namespaces[0] === '-') { @@ -163,7 +164,7 @@ function enable(namespaces) { } } - for (var i = 0; i < exports.instances.length; i++) { + for (i = 0; i < exports.instances.length; i++) { var instance = exports.instances[i]; instance.enabled = exports.enabled(instance.namespace); } From 25e07c78fc5eec5a593ebf51b2a1ed3605897e0e Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 12:01:09 -0700 Subject: [PATCH 014/118] don't call splice() when indexOf() returns -1 --- src/debug.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/debug.js b/src/debug.js index 7c49039c..77e6384a 100644 --- a/src/debug.js +++ b/src/debug.js @@ -132,8 +132,13 @@ function createDebug(namespace) { } function destroy () { - const index = exports.instances.indexOf(this) - exports.instances.splice(index, 1) + var index = exports.instances.indexOf(this); + if (index !== -1) { + exports.instances.splice(index, 1); + return true; + } else { + return false; + } } /** From 87880f6ae1f48b12d9f3346bce564a66cba6b93e Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 12:30:57 -0700 Subject: [PATCH 015/118] separate Node.js and web browser examples --- example/browser.html | 26 -------------------------- example/wildcards.js | 10 ---------- examples/browser/colors.html | 26 ++++++++++++++++++++++++++ {example => examples/node}/app.js | 4 ++-- examples/node/colors.js | 7 +++++++ {example => examples/node}/stdout.js | 2 +- examples/node/wildcards.js | 10 ++++++++++ {example => examples/node}/worker.js | 4 ++-- 8 files changed, 48 insertions(+), 41 deletions(-) delete mode 100644 example/browser.html delete mode 100644 example/wildcards.js create mode 100644 examples/browser/colors.html rename {example => examples/node}/app.js (82%) create mode 100644 examples/node/colors.js rename {example => examples/node}/stdout.js (94%) create mode 100644 examples/node/wildcards.js rename {example => examples/node}/worker.js (84%) diff --git a/example/browser.html b/example/browser.html deleted file mode 100644 index 00904189..00000000 --- a/example/browser.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - debug() - - - - - - - - diff --git a/example/wildcards.js b/example/wildcards.js deleted file mode 100644 index 1fdac20a..00000000 --- a/example/wildcards.js +++ /dev/null @@ -1,10 +0,0 @@ - -var debug = { - foo: require('../')('test:foo'), - bar: require('../')('test:bar'), - baz: require('../')('test:baz') -}; - -debug.foo('foo') -debug.bar('bar') -debug.baz('baz') \ No newline at end of file diff --git a/examples/browser/colors.html b/examples/browser/colors.html new file mode 100644 index 00000000..5d023bb2 --- /dev/null +++ b/examples/browser/colors.html @@ -0,0 +1,26 @@ + + + + debug() + + + + + + + Open your + Web Inspector + to see the debug output + + diff --git a/example/app.js b/examples/node/app.js similarity index 82% rename from example/app.js rename to examples/node/app.js index 05374d98..011b63ad 100644 --- a/example/app.js +++ b/examples/node/app.js @@ -1,5 +1,5 @@ -var debug = require('../')('http') +var debug = require('../../')('http') , http = require('http') , name = 'My App'; @@ -16,4 +16,4 @@ http.createServer(function(req, res){ // fake worker of some kind -require('./worker'); \ No newline at end of file +require('./worker'); diff --git a/examples/node/colors.js b/examples/node/colors.js new file mode 100644 index 00000000..bcc52d94 --- /dev/null +++ b/examples/node/colors.js @@ -0,0 +1,7 @@ +var debug = require('../../') + +debug.enable('*') + +for (var i=0; i < debug.colors.length; i++) { + debug('example:' + i)('The color is %o', debug.colors[i]) +} diff --git a/example/stdout.js b/examples/node/stdout.js similarity index 94% rename from example/stdout.js rename to examples/node/stdout.js index e15322da..c999c4c0 100644 --- a/example/stdout.js +++ b/examples/node/stdout.js @@ -1,4 +1,4 @@ -var debug = require('../'); +var debug = require('../../'); var error = debug('app:error'); // by default stderr is used diff --git a/examples/node/wildcards.js b/examples/node/wildcards.js new file mode 100644 index 00000000..ca99aeff --- /dev/null +++ b/examples/node/wildcards.js @@ -0,0 +1,10 @@ + +var debug = { + foo: require('../../')('test:foo'), + bar: require('../../')('test:bar'), + baz: require('../../')('test:baz') +}; + +debug.foo('foo') +debug.bar('bar') +debug.baz('baz') diff --git a/example/worker.js b/examples/node/worker.js similarity index 84% rename from example/worker.js rename to examples/node/worker.js index 22225f60..07e3bc59 100644 --- a/example/worker.js +++ b/examples/node/worker.js @@ -4,8 +4,8 @@ // DEBUG=worker:a node example/worker // DEBUG=worker:b node example/worker -var a = require('../')('worker:a') - , b = require('../')('worker:b'); +var a = require('../../')('worker:a') + , b = require('../../')('worker:b'); function work() { a('doing lots of uninteresting work'); From ce1a236d93a971dc74930972a03d4d0fe409effd Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 12:31:21 -0700 Subject: [PATCH 016/118] Makefile tweaks Re-introduce `make browser` to make a standalone build of `debug.js` for the web browser. --- Makefile | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 304b6a5e..b86958ab 100644 --- a/Makefile +++ b/Makefile @@ -15,31 +15,31 @@ YARN ?= $(shell which yarn) PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm)) BROWSERIFY ?= $(NODE) $(BIN)/browserify -.FORCE: - install: node_modules +browser: dist/debug.js + node_modules: package.json @NODE_ENV= $(PKG) install @touch node_modules -lint: .FORCE - eslint *.js src/*.js - -test-node: .FORCE - istanbul cover node_modules/mocha/bin/_mocha -- test/**.js - -test-browser: .FORCE - mkdir -p dist - +dist/debug.js: src/*.js node_modules + @mkdir -p dist @$(BROWSERIFY) \ --standalone debug \ . > dist/debug.js +lint: + eslint *.js src/*.js + +test-node: + istanbul cover node_modules/mocha/bin/_mocha -- test/**.js + +test-browser: + $(MAKE) browser karma start --single-run - rimraf dist -test: .FORCE +test: concurrently \ "make test-node" \ "make test-browser" @@ -47,4 +47,7 @@ test: .FORCE coveralls: cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js +clean: + rimraf dist + .PHONY: all install clean distclean From dfbac9c30f7f3af8c44802197d47450bcbd94952 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 12:54:19 -0700 Subject: [PATCH 017/118] readme refactor --- README.md | 118 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 69 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index bca8417e..861f2993 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,10 @@ [![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) [![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + - -A tiny node.js debugging utility modelled after node core's debugging technique. +A tiny JavaScript debugging utility modelled after Node.js core's debugging +technique. Works in Node.js and web browsers. **Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)** @@ -27,7 +28,7 @@ var debug = require('debug')('http') // fake app -debug('booting %s', name); +debug('booting %o', name); http.createServer(function(req, res){ debug(req.method + ' ' + req.url); @@ -51,52 +52,62 @@ setInterval(function(){ }, 1000); ``` - The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: +The `DEBUG` environment variable is then used to enable these based on space or +comma-delimited names. - ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) +Here are some examples: - ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) +screen shot 2017-08-08 at 12 53 04 pm +screen shot 2017-08-08 at 12 53 38 pm +screen shot 2017-08-08 at 12 53 25 pm #### Windows note - On Windows the environment variable is set using the `set` command. +On Windows the environment variable is set using the `set` command. - ```cmd - set DEBUG=*,-not_this - ``` +```cmd +set DEBUG=*,-not_this +``` - Note that PowerShell uses different syntax to set environment variables. +Note that PowerShell uses different syntax to set environment variables. - ```cmd - $env:DEBUG = "*,-not_this" - ``` +```cmd +$env:DEBUG = "*,-not_this" +``` Then, run the program to be debugged as usual. ## Millisecond diff - When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. +When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. - ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) +![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) - When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: +When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: + +![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) - ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) ## Conventions - If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. +If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. ## Wildcards - The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. +The `*` character may be used as a wildcard. Suppose for example your library has +debuggers named "connect:bodyParser", "connect:compress", "connect:session", +instead of listing all three with +`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do +`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. - You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:". +You can also exclude specific debuggers by prefixing them with a "-" character. +For example, `DEBUG=*,-connect:*` would include all debuggers except those +starting with "connect:". ## Environment Variables - When running through Node.js, you can set a few environment variables that will - change the behavior of the debug logging: +When running through Node.js, you can set a few environment variables that will +change the behavior of the debug logging: | Name | Purpose | |-----------|-------------------------------------------------| @@ -106,16 +117,16 @@ Then, run the program to be debugged as usual. | `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | - __Note:__ The environment variables beginning with `DEBUG_` end up being - converted into an Options object that gets used with `%o`/`%O` formatters. - See the Node.js documentation for - [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) - for the complete list. +__Note:__ The environment variables beginning with `DEBUG_` end up being +converted into an Options object that gets used with `%o`/`%O` formatters. +See the Node.js documentation for +[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) +for the complete list. ## Formatters - - Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters: +Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. +Below are the officially supported formatters: | Formatter | Representation | |-----------|----------------| @@ -126,9 +137,12 @@ Then, run the program to be debugged as usual. | `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | | `%%` | Single percent sign ('%'). This does not consume an argument. | + ### Custom formatters - You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like: +You can add custom formatters by extending the `debug.formatters` object. +For example, if you wanted to add support for rendering a Buffer as hex with +`%h`, you could do something like: ```js const createDebug = require('debug') @@ -142,14 +156,16 @@ debug('this is hex: %h', new Buffer('hello world')) // foo this is hex: 68656c6c6f20776f726c6421 +0ms ``` -## Browser support - You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), - or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), - if you don't want to build it yourself. - Debug's enable state is currently persisted by `localStorage`. - Consider the situation shown below where you have `worker:a` and `worker:b`, - and wish to debug both. You can enable this using `localStorage.debug`: +## Browser Support + +You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), +or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), +if you don't want to build it yourself. + +Debug's enable state is currently persisted by `localStorage`. +Consider the situation shown below where you have `worker:a` and `worker:b`, +and wish to debug both. You can enable this using `localStorage.debug`: ```js localStorage.debug = 'worker:*' @@ -172,21 +188,21 @@ setInterval(function(){ #### Web Inspector Colors - Colors are also enabled on "Web Inspectors" that understand the `%c` formatting - option. These are WebKit web inspectors, Firefox ([since version - 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) - and the Firebug plugin for Firefox (any version). +Colors are also enabled on "Web Inspectors" that understand the `%c` formatting +option. These are WebKit web inspectors, Firefox ([since version +31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) +and the Firebug plugin for Firefox (any version). - Colored output looks something like: +Colored output looks something like: - ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) +![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) ## Output streams By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: -Example _stdout.js_: +Example [_stdout.js_](./examples/node/stdout.js): ```js var debug = require('debug'); @@ -210,16 +226,20 @@ log('still goes to stdout, but via console.info now'); ## Checking whether a debug target is enabled -After you've created a debug instance, you can check whether it is enabled by its `.enabled` property: +After you've created a debug instance, you can determine whether or not it is +enabled by checking the `enabled` property: ```javascript const debug = require('debug')('http'); -if(debug.enabled) { - // ... +if (debug.enabled) { + // do stuff... } ``` +You can also manually toggle this property to force the debug instance to be +enabled or disabled. + ## Authors @@ -302,7 +322,7 @@ Become a sponsor and get your logo on our README on Github with a link to your s (The MIT License) -Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca> +Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the From 31f3343de76cb8687041387a1b811745c6e84473 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 12:56:04 -0700 Subject: [PATCH 018/118] example: use %o formatter --- examples/node/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/node/app.js b/examples/node/app.js index 011b63ad..d4a19914 100644 --- a/examples/node/app.js +++ b/examples/node/app.js @@ -5,7 +5,7 @@ var debug = require('../../')('http') // fake app -debug('booting %s', name); +debug('booting %o', name); http.createServer(function(req, res){ debug(req.method + ' ' + req.url); From 25eb545324912dd2863658d0ba35426c0f617619 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 13:02:54 -0700 Subject: [PATCH 019/118] more readme screenshots replaced --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 861f2993..a09db3a7 100644 --- a/README.md +++ b/README.md @@ -81,11 +81,11 @@ Then, run the program to be debugged as usual. When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. -![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) + When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: -![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) + ## Conventions @@ -193,9 +193,9 @@ option. These are WebKit web inspectors, Firefox ([since version 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) and the Firebug plugin for Firefox (any version). -Colored output looks something like: +Colored output looks like: -![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) + ## Output streams From 8b5c438a222167bd0cc66db046bac073f01b3c01 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 13:10:08 -0700 Subject: [PATCH 020/118] add Namespace Colors section to readme --- README.md | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index a09db3a7..46c22a9b 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,31 @@ $env:DEBUG = "*,-not_this" Then, run the program to be debugged as usual. + +## Namespace Colors + +Every debug instance has a color generated for it based on its namespace name. +This helps when visually parsing the debug output to identify which debug instance +a debug line belongs to. + +#### Node.js + +In Node.js, colors are enabled when stderr is a TTY. You also _should_ install +the [`supports-color`](https://npmjs.org/supports-color) module alongside debug, +otherwise debug will only use a small handful of basic colors. + + + +#### Web Browser + +Colors are also enabled on "Web Inspectors" that understand the `%c` formatting +option. These are WebKit web inspectors, Firefox ([since version +31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) +and the Firebug plugin for Firefox (any version). + + + + ## Millisecond diff When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. @@ -186,17 +211,6 @@ setInterval(function(){ }, 1200); ``` -#### Web Inspector Colors - -Colors are also enabled on "Web Inspectors" that understand the `%c` formatting -option. These are WebKit web inspectors, Firefox ([since version -31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) -and the Firebug plugin for Firefox (any version). - -Colored output looks like: - - - ## Output streams From 87e7399fd7e6c4196082bcbfd02bedf95d1b9c76 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 13:12:42 -0700 Subject: [PATCH 021/118] readme++ --- README.md | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 46c22a9b..a2b122e9 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ $ npm install debug `debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. -Example _app.js_: +Example [_app.js_](./examples/node/app.js): ```js var debug = require('debug')('http') @@ -42,14 +42,25 @@ http.createServer(function(req, res){ require('./worker'); ``` -Example _worker.js_: +Example [_worker.js_](./examples/node/worker.js): ```js -var debug = require('debug')('worker'); +var a = require('debug')('worker:a') + , b = require('debug')('worker:b'); -setInterval(function(){ - debug('doing some work'); -}, 1000); +function work() { + a('doing lots of uninteresting work'); + setTimeout(work, Math.random() * 1000); +} + +work(); + +function workb() { + b('doing some work'); + setTimeout(workb, Math.random() * 2000); +} + +workb(); ``` The `DEBUG` environment variable is then used to enable these based on space or From 402c8567ee3e01e36464ba9591ac436de6fbf0a9 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 13:30:21 -0700 Subject: [PATCH 022/118] fix lint --- .eslintrc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.eslintrc b/.eslintrc index 8a37ae2c..146371ed 100644 --- a/.eslintrc +++ b/.eslintrc @@ -3,6 +3,9 @@ "browser": true, "node": true }, + "globals": { + "chrome": true + }, "rules": { "no-console": 0, "no-empty": [1, { "allowEmptyCatch": true }] From d73c4aec194f98a3075adf530b020d4b3098c6cc Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 14:17:03 -0700 Subject: [PATCH 023/118] fix `make test` --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b86958ab..5d400023 100644 --- a/Makefile +++ b/Makefile @@ -50,4 +50,4 @@ coveralls: clean: rimraf dist -.PHONY: all install clean distclean +.PHONY: browser install clean coveralls lint test test-node test-browser From f178d861df18abacac6e9e4607c7306a1147bf3d Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 14:26:59 -0700 Subject: [PATCH 024/118] attempt to separate the Node and Browser tests in Travis --- .travis.yml | 13 ++++++++++--- Makefile | 25 +++++++++++++++---------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6c6090c3..1a5bde09 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,21 @@ +sudo: false language: node_js + node_js: - - "6" - - "5" - "4" + - "6" + - "8" install: - - make node_modules + - make install script: - make lint - make test - make coveralls + +matrix: + include: + - node_js: '8' + env: BROWSER=1 diff --git a/Makefile b/Makefile index 5d400023..f4f89d02 100644 --- a/Makefile +++ b/Makefile @@ -30,24 +30,29 @@ dist/debug.js: src/*.js node_modules . > dist/debug.js lint: - eslint *.js src/*.js + @eslint *.js src/*.js test-node: - istanbul cover node_modules/mocha/bin/_mocha -- test/**.js + @istanbul cover node_modules/mocha/bin/_mocha -- test/**.js + @cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js test-browser: - $(MAKE) browser - karma start --single-run + @$(MAKE) browser + @karma start --single-run -test: - concurrently \ +test-all: + @concurrently \ "make test-node" \ "make test-browser" -coveralls: - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js +test: + @if [ "x$(BROWSER_NAME)" = "x" ]; then \ + $(MAKE) test-node; \ + else \ + $(MAKE) test-browser; \ + fi clean: - rimraf dist + rimraf dist coverage -.PHONY: browser install clean coveralls lint test test-node test-browser +.PHONY: browser install clean lint test test-all test-node test-browser From f6f621327796a92d75362e48dff2a1f51299a9ba Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 14:30:26 -0700 Subject: [PATCH 025/118] remove `make coveralls` from travis --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1a5bde09..a7643003 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,6 @@ install: script: - make lint - make test - - make coveralls matrix: include: From 67529535431ea0c7368131683e7454266884e2fc Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 14:34:35 -0700 Subject: [PATCH 026/118] =?UTF-8?q?fix=20browser=20test=20=F0=9F=98=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f4f89d02..3ddd1360 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,7 @@ test-all: "make test-browser" test: - @if [ "x$(BROWSER_NAME)" = "x" ]; then \ + @if [ "x$(BROWSER)" = "x" ]; then \ $(MAKE) test-node; \ else \ $(MAKE) test-browser; \ From d2dd80aeaf1b037f0b3be21838c4594bbedc4a9c Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 14:49:27 -0700 Subject: [PATCH 027/118] component: update "ms" to v2.0.0 --- component.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/component.json b/component.json index 94cd36d8..d1f6e22b 100644 --- a/component.json +++ b/component.json @@ -14,6 +14,6 @@ "src/debug.js" ], "dependencies": { - "rauchg/ms.js": "0.7.1" + "rauchg/ms.js": "2.0.0" } } From 52b894cd798f492ead1866fca4d76a649f0e62c6 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 14:55:46 -0700 Subject: [PATCH 028/118] Release 3.0.0 --- CHANGELOG.md | 16 ++++++++++++++++ component.json | 2 +- package.json | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1a270cd..404d5bef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,20 @@ +3.0.0 / 2017-08-08 +================== + + * Breaking: Remove DEBUG_FD (#406) + * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418) + * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408) + * Addition: document `enabled` flag (#465) + * Addition: add 256 colors mode (#481) + * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440) + * Update: component: update "ms" to v2.0.0 + * Update: separate the Node and Browser tests in Travis-CI + * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots + * Update: separate Node.js and web browser examples for organization + * Update: update "browserify" to v14.4.0 + * Fix: fix Readme typo (#473) + 2.6.8 / 2017-05-18 ================== diff --git a/component.json b/component.json index d1f6e22b..531e0123 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "debug", "repo": "visionmedia/debug", "description": "small debugging utility", - "version": "2.6.8", + "version": "3.0.0", "keywords": [ "debug", "log", diff --git a/package.json b/package.json index bad6f09b..869b045d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "2.6.8", + "version": "3.0.0", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From 13e1d068e9265b2c9a160ba242a6be200b9811f0 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 8 Aug 2017 15:23:50 -0700 Subject: [PATCH 029/118] remove v3 discussion note for now --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index a2b122e9..1f3b08e1 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,6 @@ A tiny JavaScript debugging utility modelled after Node.js core's debugging technique. Works in Node.js and web browsers. -**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)** - ## Installation ```bash From b3ea123cc45828af926efbf5e5a4c63bd11b7aab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Baz=20Castillo?= Date: Thu, 24 Aug 2017 21:40:18 +0200 Subject: [PATCH 030/118] Disable colors in Edge and Internet Explorer (#489) Fixes #417. --- src/browser.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/browser.js b/src/browser.js index 879aaa79..f5149ff5 100644 --- a/src/browser.js +++ b/src/browser.js @@ -49,6 +49,11 @@ function useColors() { 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; + } + // 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) || From 3e1849d3aaa1b9a325ad6d054acf695fddb4efe9 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Thu, 24 Aug 2017 12:44:17 -0700 Subject: [PATCH 031/118] Release 3.0.1 --- CHANGELOG.md | 5 +++++ component.json | 2 +- package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 404d5bef..a1c0eaf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ +3.0.1 / 2017-08-24 +================== + + * Fix: Disable colors in Edge and Internet Explorer (#489) + 3.0.0 / 2017-08-08 ================== diff --git a/component.json b/component.json index 531e0123..a2e9ad39 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "debug", "repo": "visionmedia/debug", "description": "small debugging utility", - "version": "3.0.0", + "version": "3.0.1", "keywords": [ "debug", "log", diff --git a/package.json b/package.json index 869b045d..1514200b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "3.0.0", + "version": "3.0.1", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From daf1a7c8c0f62f5dbc8d48158d6748d0527cc551 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Fri, 1 Sep 2017 19:49:50 +0100 Subject: [PATCH 032/118] correct spelling mistake --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1c0eaf5..1cf73043 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,7 +43,7 @@ 2.6.4 / 2017-04-20 ================== - * Fix: bug that would occure if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) + * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) * Chore: ignore bower.json in npm installations. (#437, @joaovieira) * Misc: update "ms" to v0.7.3 (@tootallnate) From 7cd9e539ce571fc3314d34d9d1dac3124839dbac Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Wed, 13 Sep 2017 15:39:28 +0200 Subject: [PATCH 033/118] examples: fix colors printout Fixes #502. --- examples/browser/colors.html | 4 +++- examples/node/colors.js | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/browser/colors.html b/examples/browser/colors.html index 5d023bb2..ce969072 100644 --- a/examples/browser/colors.html +++ b/examples/browser/colors.html @@ -8,13 +8,15 @@ debug.enable('*') for (var i=0; i < debug.colors.length; i++) { - debug('example:' + i)('The color is %o', debug.colors[i]) + const d = debug('example:' + i); + d('The color is %o', d.color); } diff --git a/examples/node/colors.js b/examples/node/colors.js index bcc52d94..c144ee4e 100644 --- a/examples/node/colors.js +++ b/examples/node/colors.js @@ -3,5 +3,6 @@ var debug = require('../../') debug.enable('*') for (var i=0; i < debug.colors.length; i++) { - debug('example:' + i)('The color is %o', debug.colors[i]) + const d = debug('example:' + i); + d('The color is %o', d.color); } From fdfa0f5f6cc7e83fd60b6cf1e7b990cbf6388621 Mon Sep 17 00:00:00 2001 From: Mariusz Nowak Date: Mon, 15 May 2017 10:48:24 +0200 Subject: [PATCH 034/118] Fix browser detection --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index e12cf4d5..cabcbcda 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,7 @@ * treat as a browser. */ -if (typeof process !== 'undefined' && process.type === 'renderer') { +if (typeof process === 'undefined' || process.type === 'renderer') { module.exports = require('./browser.js'); } else { module.exports = require('./node.js'); From e7e568a24736486721882282eb21beb31c741647 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Fri, 15 Sep 2017 00:25:50 +0200 Subject: [PATCH 035/118] ignore package-lock.json --- .gitignore | 5 ++++- src/{debug.js => common.js} | 0 2 files changed, 4 insertions(+), 1 deletion(-) rename src/{debug.js => common.js} (100%) diff --git a/.gitignore b/.gitignore index f459ae9f..f0cf3a35 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,10 @@ node_modules *.sock build -yarn.lock npm-debug.log dist coverage + +# lockfiles +yarn.lock +package-lock.json diff --git a/src/debug.js b/src/common.js similarity index 100% rename from src/debug.js rename to src/common.js From a0601e5e65ca80ce2f39b1243db332c64c124214 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Fri, 15 Sep 2017 02:28:44 +0200 Subject: [PATCH 036/118] fix --- src/{common.js => debug.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{common.js => debug.js} (100%) diff --git a/src/common.js b/src/debug.js similarity index 100% rename from src/common.js rename to src/debug.js From 47747f329fe159e94262318b52b87a48f6c0acd4 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 19 Sep 2017 00:09:21 +0200 Subject: [PATCH 037/118] remove `component.json` The project has been deprected since 2015. We should be encouraging the community to move forward and thus this file should be removed. --- component.json | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 component.json diff --git a/component.json b/component.json deleted file mode 100644 index a2e9ad39..00000000 --- a/component.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "debug", - "repo": "visionmedia/debug", - "description": "small debugging utility", - "version": "3.0.1", - "keywords": [ - "debug", - "log", - "debugger" - ], - "main": "src/browser.js", - "scripts": [ - "src/browser.js", - "src/debug.js" - ], - "dependencies": { - "rauchg/ms.js": "2.0.0" - } -} From c38a0166c266a679c8de012d4eaccec3f944e685 Mon Sep 17 00:00:00 2001 From: Ya Zhuang Date: Fri, 22 Sep 2017 06:26:33 +0800 Subject: [PATCH 038/118] remove ReDoS regexp in %o formatter (#504) --- src/node.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/node.js b/src/node.js index b85ec7e3..2bc75713 100644 --- a/src/node.js +++ b/src/node.js @@ -83,7 +83,9 @@ function useColors() { exports.formatters.o = function(v) { this.inspectOpts.colors = this.useColors; return util.inspect(v, this.inspectOpts) - .replace(/\s*\n\s*/g, ' '); + .split('\n').map(function(str) { + return str.trim() + }).join(' '); }; /** From bdb7e0137f84dc8bcfc95daede7c694799d38dbf Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Thu, 21 Sep 2017 20:02:06 +0200 Subject: [PATCH 039/118] remove "component" from package.json --- package.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/package.json b/package.json index 1514200b..8777fc3d 100644 --- a/package.json +++ b/package.json @@ -39,11 +39,5 @@ "sinon-chai": "^2.8.0" }, "main": "./src/index.js", - "browser": "./src/browser.js", - "component": { - "scripts": { - "debug/index.js": "browser.js", - "debug/debug.js": "debug.js" - } - } + "browser": "./src/browser.js" } From f53962e944a87e6ca9bb622a2a12dffc22a9bb5a Mon Sep 17 00:00:00 2001 From: Ya Zhuang Date: Fri, 22 Sep 2017 06:26:33 +0800 Subject: [PATCH 040/118] remove ReDoS regexp in %o formatter (#504) --- src/node.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/node.js b/src/node.js index af612976..b15109c9 100644 --- a/src/node.js +++ b/src/node.js @@ -85,7 +85,9 @@ function useColors() { exports.formatters.o = function(v) { this.inspectOpts.colors = this.useColors; return util.inspect(v, this.inspectOpts) - .replace(/\s*\n\s*/g, ' '); + .split('\n').map(function(str) { + return str.trim() + }).join(' '); }; /** From 13abeae468fea297d0dccc50bc55590809241083 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Fri, 22 Sep 2017 15:32:23 +0200 Subject: [PATCH 041/118] Release 2.6.9 --- CHANGELOG.md | 5 +++++ component.json | 2 +- package.json | 2 +- src/inspector-log.js | 15 +++++++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 src/inspector-log.js diff --git a/CHANGELOG.md b/CHANGELOG.md index a1a270cd..eadaa189 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ +2.6.9 / 2017-09-22 +================== + + * remove ReDoS regexp in %o formatter (#504) + 2.6.8 / 2017-05-18 ================== diff --git a/component.json b/component.json index 94cd36d8..9de26410 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "debug", "repo": "visionmedia/debug", "description": "small debugging utility", - "version": "2.6.8", + "version": "2.6.9", "keywords": [ "debug", "log", diff --git a/package.json b/package.json index df863517..dc787ba7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "2.6.8", + "version": "2.6.9", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" diff --git a/src/inspector-log.js b/src/inspector-log.js new file mode 100644 index 00000000..60ea6c04 --- /dev/null +++ b/src/inspector-log.js @@ -0,0 +1,15 @@ +module.exports = inspectorLog; + +// black hole +const nullStream = new (require('stream').Writable)(); +nullStream._write = () => {}; + +/** + * Outputs a `console.log()` to the Node.js Inspector console *only*. + */ +function inspectorLog() { + const stdout = console._stdout; + console._stdout = nullStream; + console.log.apply(console, arguments); + console._stdout = stdout; +} From 56a3853b95990a22079d646601aa01e93eceb1c7 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Fri, 22 Sep 2017 15:45:06 +0200 Subject: [PATCH 042/118] Add `DEBUG_HIDE_TTY_DATE` env var (#486) Squashed commit of the following: commit 62589c0a4e1babc5953ea30c7ef80b3867ed0a04 Author: Adrian Mejia Date: Sat Aug 12 15:24:45 2017 -0400 solves merge conflict commit 55e5c5e86812163293779e9bbad1afc252c83230 Author: Adrian Mejia Date: Sat Aug 12 15:21:16 2017 -0400 docs commit e09dec33c15fae136039c7ebd94c23000a35373f Author: Adrian Mejia Date: Sat Aug 12 15:19:10 2017 -0400 cleanup commit 9dd6a2b9ca3b1f0d9852ecf0e64ccc6dacf04fa7 Author: Adrian Mejia Date: Sat Aug 12 15:05:53 2017 -0400 enables DEBUG_HIDE_TTY_DATE --- README.md | 5 +++-- src/node.js | 11 +++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1f3b08e1..9157bfc4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # debug -[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) [![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) @@ -149,6 +149,7 @@ change the behavior of the debug logging: | `DEBUG_COLORS`| Whether or not to use colors in the debug output. | | `DEBUG_DEPTH` | Object inspection depth. | | `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | +| `DEBUG_HIDE_TTY_DATE` | Hide date from debug output on TTY. | __Note:__ The environment variables beginning with `DEBUG_` end up being @@ -269,7 +270,7 @@ enabled or disabled. - TJ Holowaychuk - Nathan Rajlich - Andrew Rhyne - + ## Backers Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] diff --git a/src/node.js b/src/node.js index 2bc75713..5440d5b0 100644 --- a/src/node.js +++ b/src/node.js @@ -115,8 +115,15 @@ function formatArgs(args) { args[0] = prefix + args[0].split('\n').join('\n' + prefix); args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); } else { - args[0] = new Date().toISOString() - + ' ' + name + ' ' + args[0]; + args[0] = getDate() + name + ' ' + args[0]; + } +} + +function getDate() { + if (exports.inspectOpts.hideTtyDate) { + return ''; + } else { + return new Date().toISOString() + ' '; } } From 2c0df9baf7aefae2ea830e9d5eb2be64f0e71f18 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 26 Sep 2017 21:11:45 +0200 Subject: [PATCH 043/118] rename `DEBUG_HIDE_TTY_DATE` to `DEBUG_HIDE_DATE` The date is actually only printed when output is *NOT* a TTY. Let's just genericize the name instead. --- README.md | 4 ++-- src/node.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9157bfc4..8e754d17 100644 --- a/README.md +++ b/README.md @@ -146,10 +146,10 @@ change the behavior of the debug logging: | Name | Purpose | |-----------|-------------------------------------------------| | `DEBUG` | Enables/disables specific debugging namespaces. | +| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY). | | `DEBUG_COLORS`| Whether or not to use colors in the debug output. | -| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_DEPTH` | Object inspection depth. | | `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | -| `DEBUG_HIDE_TTY_DATE` | Hide date from debug output on TTY. | __Note:__ The environment variables beginning with `DEBUG_` end up being diff --git a/src/node.js b/src/node.js index 5440d5b0..d666fb9c 100644 --- a/src/node.js +++ b/src/node.js @@ -120,7 +120,7 @@ function formatArgs(args) { } function getDate() { - if (exports.inspectOpts.hideTtyDate) { + if (exports.inspectOpts.hideDate) { return ''; } else { return new Date().toISOString() + ' '; From f073e056f33efdd5b311381eb6bca2bc850745bf Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 26 Sep 2017 21:13:38 +0200 Subject: [PATCH 044/118] Release 3.1.0 --- CHANGELOG.md | 12 ++++++++++++ package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a81736c0..820d21e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,16 @@ +3.1.0 / 2017-09-26 +================== + + * Add `DEBUG_HIDE_DATE` env var (#486) + * Remove ReDoS regexp in %o formatter (#504) + * Remove "component" from package.json + * Remove `component.json` + * Ignore package-lock.json + * Examples: fix colors printout + * Fix: browser detection + * Fix: spelling mistake (#496, @EdwardBetts) + 3.0.1 / 2017-08-24 ================== diff --git a/package.json b/package.json index 8777fc3d..ada43cfe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "3.0.1", + "version": "3.1.0", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From 71169065b5262f9858ac78cc0b688c84a438f290 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Wed, 11 Oct 2017 08:31:18 -0700 Subject: [PATCH 045/118] refactor to make the common code be a setup function (#507) This is so that we can make both a Node.js instance and web browser instance for when `--inspect` is used in Node.js. --- src/browser.js | 40 ++++----- src/common.js | 235 +++++++++++++++++++++++++++++++++++++++++++++++++ src/debug.js | 225 ---------------------------------------------- src/node.js | 47 +++++----- 4 files changed, 272 insertions(+), 275 deletions(-) create mode 100644 src/common.js delete mode 100644 src/debug.js diff --git a/src/browser.js b/src/browser.js index f5149ff5..f18d63e7 100644 --- a/src/browser.js +++ b/src/browser.js @@ -1,10 +1,7 @@ /** * This is the web browser implementation of `debug()`. - * - * Expose `debug()` as the module. */ -exports = module.exports = require('./debug'); exports.log = log; exports.formatArgs = formatArgs; exports.save = save; @@ -66,19 +63,6 @@ function useColors() { (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. * @@ -93,7 +77,7 @@ function formatArgs(args) { + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') - + '+' + exports.humanize(this.diff); + + '+' + module.exports.humanize(this.diff); if (!useColors) return; @@ -171,12 +155,6 @@ function load() { return r; } -/** - * Enable namespaces listed in `localStorage.debug` initially. - */ - -exports.enable(load()); - /** * Localstorage attempts to return the localstorage. * @@ -193,3 +171,19 @@ function localstorage() { return window.localStorage; } catch (e) {} } + +module.exports = require('./common')(exports); + +var formatters = module.exports.formatters; + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; diff --git a/src/common.js b/src/common.js new file mode 100644 index 00000000..61eaf893 --- /dev/null +++ b/src/common.js @@ -0,0 +1,235 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + +module.exports = function setup(env) { + createDebug.debug = createDebug['default'] = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require('ms'); + + Object.keys(env).forEach(function(key) { + createDebug[key] = env[key]; + }); + + /** + * Active `debug` instances. + */ + createDebug.instances = []; + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + + createDebug.formatters = {}; + + /** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + + function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + + function createDebug(namespace) { + var prevTime; + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = createDebug.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = createDebug.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + var logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = createDebug.enabled(namespace); + debug.useColors = createDebug.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + //debug.formatArgs = formatArgs; + //debug.rawLog = rawLog; + + // env-specific initialization logic for debug instances + if ('function' === typeof createDebug.init) { + createDebug.init(debug); + } + + createDebug.instances.push(debug); + + return debug; + } + + function destroy () { + var index = createDebug.instances.indexOf(this); + if (index !== -1) { + createDebug.instances.splice(index, 1); + return true; + } else { + return false; + } + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + + function enable(namespaces) { + createDebug.save(namespaces); + + createDebug.names = []; + createDebug.skips = []; + + var i; + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + + for (i = 0; i < createDebug.instances.length; i++) { + var instance = createDebug.instances[i]; + instance.enabled = createDebug.enabled(instance.namespace); + } + } + + /** + * Disable debug output. + * + * @api public + */ + + function disable() { + createDebug.enable(''); + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + var i, len; + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + return false; + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + + function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; + } + + createDebug.enable(createDebug.load()); + + return createDebug; +} diff --git a/src/debug.js b/src/debug.js deleted file mode 100644 index 77e6384a..00000000 --- a/src/debug.js +++ /dev/null @@ -1,225 +0,0 @@ - -/** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; -exports.coerce = coerce; -exports.disable = disable; -exports.enable = enable; -exports.enabled = enabled; -exports.humanize = require('ms'); - -/** - * Active `debug` instances. - */ -exports.instances = []; - -/** - * The currently active debug mode names, and names to skip. - */ - -exports.names = []; -exports.skips = []; - -/** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - -exports.formatters = {}; - -/** - * Select a color. - * @param {String} namespace - * @return {Number} - * @api private - */ - -function selectColor(namespace) { - var hash = 0, i; - - for (i in namespace) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - - return exports.colors[Math.abs(hash) % exports.colors.length]; -} - -/** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - -function createDebug(namespace) { - - var prevTime; - - function debug() { - // disabled? - if (!debug.enabled) return; - - var self = debug; - - // set `diff` timestamp - var curr = +new Date(); - var ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - - // turn the `arguments` into a proper Array - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - - args[0] = exports.coerce(args[0]); - - if ('string' !== typeof args[0]) { - // anything else let's inspect with %O - args.unshift('%O'); - } - - // apply any `formatters` transformations - var index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { - // if we encounter an escaped % then don't increase the array index - if (match === '%%') return match; - index++; - var formatter = exports.formatters[format]; - if ('function' === typeof formatter) { - var val = args[index]; - match = formatter.call(self, val); - - // now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); - - // apply env-specific formatting (colors, etc.) - exports.formatArgs.call(self, args); - - var logFn = debug.log || exports.log || console.log.bind(console); - logFn.apply(self, args); - } - - debug.namespace = namespace; - debug.enabled = exports.enabled(namespace); - debug.useColors = exports.useColors(); - debug.color = selectColor(namespace); - debug.destroy = destroy; - - // env-specific initialization logic for debug instances - if ('function' === typeof exports.init) { - exports.init(debug); - } - - exports.instances.push(debug); - - return debug; -} - -function destroy () { - var index = exports.instances.indexOf(this); - if (index !== -1) { - exports.instances.splice(index, 1); - return true; - } else { - return false; - } -} - -/** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - -function enable(namespaces) { - exports.save(namespaces); - - exports.names = []; - exports.skips = []; - - var i; - var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - var len = split.length; - - for (i = 0; i < len; i++) { - if (!split[i]) continue; // ignore empty strings - namespaces = split[i].replace(/\*/g, '.*?'); - if (namespaces[0] === '-') { - exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - exports.names.push(new RegExp('^' + namespaces + '$')); - } - } - - for (i = 0; i < exports.instances.length; i++) { - var instance = exports.instances[i]; - instance.enabled = exports.enabled(instance.namespace); - } -} - -/** - * Disable debug output. - * - * @api public - */ - -function disable() { - exports.enable(''); -} - -/** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - -function enabled(name) { - if (name[name.length - 1] === '*') { - return true; - } - var i, len; - for (i = 0, len = exports.skips.length; i < len; i++) { - if (exports.skips[i].test(name)) { - return false; - } - } - for (i = 0, len = exports.names.length; i < len; i++) { - if (exports.names[i].test(name)) { - return true; - } - } - return false; -} - -/** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} diff --git a/src/node.js b/src/node.js index d666fb9c..b32d831a 100644 --- a/src/node.js +++ b/src/node.js @@ -7,11 +7,8 @@ var util = require('util'); /** * This is the Node.js implementation of `debug()`. - * - * Expose `debug()` as the module. */ -exports = module.exports = require('./debug'); exports.init = init; exports.log = log; exports.formatArgs = formatArgs; @@ -76,27 +73,6 @@ function useColors() { : 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. * @@ -113,7 +89,7 @@ function formatArgs(args) { var 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'); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001b[0m'); } else { args[0] = getDate() + name + ' ' + args[0]; } @@ -179,8 +155,25 @@ function init (debug) { } } +module.exports = require('./common')(exports); + +var formatters = module.exports.formatters; + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .replace(/\s*\n\s*/g, ' '); +}; + /** - * Enable namespaces listed in `process.env.DEBUG` initially. + * Map %O to `util.inspect()`, allowing multiple lines if needed. */ -exports.enable(load()); +formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; From ab5083f68a7e4c1ab474ff06cd5995d706abf143 Mon Sep 17 00:00:00 2001 From: Arnaud Benhamdine Date: Wed, 8 Nov 2017 23:24:04 +0100 Subject: [PATCH 046/118] Document `enable()` (#517) Document enable, and help to avoid pitfall of https://github.com/visionmedia/debug/issues/425 --- README.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/README.md b/README.md index 8e754d17..8a3b70bf 100644 --- a/README.md +++ b/README.md @@ -248,6 +248,41 @@ error('now goes to stdout via console.info'); log('still goes to stdout, but via console.info now'); ``` +## 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 After you've created a debug instance, you can determine whether or not it is From 285dfe10a5c06d4a86176b54bef2d7591eedaf40 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Thu, 9 Nov 2017 12:35:02 -0800 Subject: [PATCH 047/118] fix colors with `supports-color@5` --- src/node.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node.js b/src/node.js index b32d831a..c13b932c 100644 --- a/src/node.js +++ b/src/node.js @@ -24,7 +24,7 @@ exports.colors = [ 6, 2, 3, 4, 5, 1 ]; try { var supportsColor = require('supports-color'); - if (supportsColor && supportsColor.level >= 2) { + 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, From a5ca7a20860e78a4ea47f80770c09c0c663bae1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Rodr=C3=ADguez=20Baquero?= Date: Tue, 5 Dec 2017 19:51:50 -0500 Subject: [PATCH 048/118] Update .npmignore (#527) Don't upload to npm unneeded files --- .npmignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.npmignore b/.npmignore index 5f60eecc..9c93383c 100644 --- a/.npmignore +++ b/.npmignore @@ -7,3 +7,9 @@ dist yarn.lock coverage bower.json +.coveralls.yml +.eslintrc +.travis.yml +.npmignore +karma.conf.js +Makefile From 22f993216dcdcee07eb0601ea71a917e4925a30a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouven=20We=C3=9Fling?= Date: Sun, 7 Jan 2018 22:45:57 +0100 Subject: [PATCH 049/118] Update ms to 2.1.1 (#539) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ada43cfe..9af3874d 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ ], "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" }, "devDependencies": { "browserify": "14.4.0", From 225c66f7198d2995e8232f9486aa9e087dc2a469 Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Fri, 20 Apr 2018 17:48:41 +0300 Subject: [PATCH 050/118] Detect 'process' package --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index cabcbcda..9b44b967 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,7 @@ * treat as a browser. */ -if (typeof process === 'undefined' || process.type === 'renderer') { +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true) { module.exports = require('./browser.js'); } else { module.exports = require('./node.js'); From 1ad1e4a79ff36981c1972bb4e61f93c7d4ade68d Mon Sep 17 00:00:00 2001 From: KyleStay Date: Wed, 20 Jun 2018 18:49:49 -0400 Subject: [PATCH 051/118] Improve usability of Windows notes w/ examples for prompts & npm script (#577) * Improve usability of Windows notes w/ examples for prompts & npm script * Made changes requested for pull request https://github.com/visionmedia/debug/pull/577#pullrequestreview-130549763 --- README.md | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8a3b70bf..b9f4b49a 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,9 @@ Here are some examples: screen shot 2017-08-08 at 12 53 38 pm screen shot 2017-08-08 at 12 53 25 pm -#### Windows note +#### Windows command prompt notes + +##### CMD On Windows the environment variable is set using the `set` command. @@ -78,14 +80,32 @@ On Windows the environment variable is set using the `set` command. set DEBUG=*,-not_this ``` -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", +``` ## Namespace Colors From 02b9ea9fd7ec95c42de47da13b4b6bb8e50025d8 Mon Sep 17 00:00:00 2001 From: Frank Febbraro Date: Thu, 21 Jun 2018 13:13:12 -0700 Subject: [PATCH 052/118] Add TVMLKit support (#579) * Adding TVMLKit support * removed the check for window/navigationDocument, instead relying on localStorage in the global context on all 'browser' based platforms --- src/browser.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/browser.js b/src/browser.js index a4f1fcb6..4d61d080 100644 --- a/src/browser.js +++ b/src/browser.js @@ -126,7 +126,7 @@ function save(namespaces) { if (null == namespaces) { exports.storage.removeItem('debug'); } else { - exports.storage.debug = namespaces; + exports.storage.setItem('debug', namespaces); } } catch(e) {} } @@ -141,7 +141,7 @@ function save(namespaces) { function load() { var r; try { - r = exports.storage.debug; + r = exports.storage.getItem('debug'); } catch(e) {} // If debug isn't set in LS, and we're in Electron, try to load $DEBUG @@ -165,7 +165,9 @@ function load() { function localstorage() { try { - return window.localStorage; + // 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 (e) {} } From 05b0ceb8856bc7b6bb0f2adc3de5cae3cea9c872 Mon Sep 17 00:00:00 2001 From: Daniel Ruf Date: Sun, 24 Jun 2018 04:31:31 +0200 Subject: [PATCH 053/118] add Node.js 10, remove Node.js 4 (#583) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a7643003..05f3dbb2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,9 @@ sudo: false language: node_js node_js: - - "4" - "6" - "8" + - "10" install: - make install From 207a6a2d53507ec9dd57c94c46cc7d3dd272306d Mon Sep 17 00:00:00 2001 From: Miau Lightouch Date: Thu, 26 Jul 2018 16:07:10 +0800 Subject: [PATCH 054/118] Fix nwjs support (#569) --- src/browser.js | 2 +- src/index.js | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/browser.js b/src/browser.js index 4d61d080..b6d94e17 100644 --- a/src/browser.js +++ b/src/browser.js @@ -39,7 +39,7 @@ 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') { + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { return true; } diff --git a/src/index.js b/src/index.js index 9b44b967..a8792cc1 100644 --- a/src/index.js +++ b/src/index.js @@ -1,9 +1,10 @@ /** - * 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' || process.browser === true) { + +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { module.exports = require('./browser.js'); } else { module.exports = require('./node.js'); From e43e5fed177b8698674748063f4ed1aaba1d59c8 Mon Sep 17 00:00:00 2001 From: Ruslan Boliev Date: Tue, 11 Sep 2018 06:06:24 +0300 Subject: [PATCH 055/118] add instance extends feature (#524) * instance extends feature * add .extend documentation * allow empty delimiter in extend --- README.md | 14 ++++++++++++++ src/common.js | 5 +++++ test/debug_spec.js | 26 ++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/README.md b/README.md index b9f4b49a..0ee7634d 100644 --- a/README.md +++ b/README.md @@ -268,6 +268,20 @@ error('now goes to stdout via console.info'); log('still goes to stdout, but via console.info now'); ``` +## 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 : diff --git a/src/common.js b/src/common.js index 61eaf893..65713e4d 100644 --- a/src/common.js +++ b/src/common.js @@ -123,6 +123,7 @@ module.exports = function setup(env) { debug.useColors = createDebug.useColors(); debug.color = selectColor(namespace); debug.destroy = destroy; + debug.extend = extend; //debug.formatArgs = formatArgs; //debug.rawLog = rawLog; @@ -146,6 +147,10 @@ module.exports = function setup(env) { } } + function extend (namespace, delimiter) { + return createDebug(this.namespace + (typeof delimiter !== 'undefined' ? delimiter : ':') + namespace); + } + /** * Enables a debug mode by namespaces. This can include modes * separated by a colon and wildcards. diff --git a/test/debug_spec.js b/test/debug_spec.js index 142fbe79..7ac6d7cd 100644 --- a/test/debug_spec.js +++ b/test/debug_spec.js @@ -64,4 +64,30 @@ describe('debug', function () { }); }); + + describe('extend namespace', function () { + var log; + + beforeEach(function () { + debug.enable('foo'); + log = debug('foo'); + }); + + it('should extend namespace', function () { + var logBar = log.extend('bar'); + expect(logBar.namespace).to.be.equal('foo:bar'); + }); + + it('should extend namespace with custom delimiter', function () { + var logBar = log.extend('bar', '--'); + expect(logBar.namespace).to.be.equal('foo--bar'); + }); + + it('should extend namespace with empty delimiter', function () { + var logBar = log.extend('bar', ''); + expect(logBar.namespace).to.be.equal('foobar'); + }); + + }); + }); From 7e1d5d94f31b37b460fb8d88000ab7ed0be3597e Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 10 Sep 2018 21:33:02 -0600 Subject: [PATCH 056/118] add yarn-error.log to .gitignore --- .gitignore | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index f0cf3a35..15be2208 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,11 @@ .DS_Store -node_modules +node_modules/ *.sock -build +/build/ npm-debug.log -dist -coverage +yarn-error.log +/dist/ +/coverage/ # lockfiles yarn.lock From 853853f9f588044d76df3daf1959ca56c5f341b7 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 10 Sep 2018 21:33:29 -0600 Subject: [PATCH 057/118] bump vulnerable packages --- package.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 9af3874d..4e922381 100644 --- a/package.json +++ b/package.json @@ -24,19 +24,20 @@ "browserify": "14.4.0", "chai": "^3.5.0", "concurrently": "^3.1.0", - "coveralls": "^2.11.15", + "coveralls": "^3.0.2", "eslint": "^3.12.1", "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" + "sinon-chai": "^2.8.0", + "xo": "^0.23.0" }, "main": "./src/index.js", "browser": "./src/browser.js" From 2d2509e26bf6df1e1954267e3b1a1cb83973fb09 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 10 Sep 2018 21:46:11 -0600 Subject: [PATCH 058/118] add .editorconfig --- .editorconfig | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..a2be8159 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,37 @@ +root = true + +[*] +indent_style = tab +indent_size = 4 +tab_width = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[{*.json,*.json.example,*.gyp,*.yml,*.yaml}] +indent_style = space +indent_size = 2 + +[{*.py,*.asm}] +indent_style = space + +[*.py] +indent_size = 4 + +[*.asm] +indent_size = 8 + +[*.md] +trim_trailing_whitespace = false + +# Ideal settings - some plugins might support these. +[*.js] +quote_type = single + +[{*.c,*.cc,*.h,*.hh,*.cpp,*.hpp,*.m,*.mm,*.mpp,*.js,*.java,*.go,*.rs,*.php,*.ng,*.jsx,*.ts,*.d,*.cs,*.swift}] +curly_bracket_next_line = false +spaces_around_operators = true +spaces_around_brackets = outside +# close enough to 1TB +indent_brace_style = K&R From ba8a424d41e9dc6129e081ac3aa9715be6a45fbd Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 10 Sep 2018 22:04:31 -0600 Subject: [PATCH 059/118] move to XO (closes #397) --- examples/node/app.js | 23 +- examples/node/colors.js | 10 +- examples/node/stdout.js | 15 +- examples/node/wildcards.js | 14 +- examples/node/worker.js | 17 +- karma.conf.js | 124 +++++----- package.json | 3 + src/browser.js | 276 ++++++++++++++-------- src/common.js | 471 +++++++++++++++++++------------------ src/index.js | 5 +- src/node.js | 236 ++++++++++++------- test/debug-spec.js | 92 ++++++++ test/debug_spec.js | 93 -------- 13 files changed, 766 insertions(+), 613 deletions(-) create mode 100644 test/debug-spec.js delete mode 100644 test/debug_spec.js diff --git a/examples/node/app.js b/examples/node/app.js index d4a19914..08d3f257 100644 --- a/examples/node/app.js +++ b/examples/node/app.js @@ -1,19 +1,20 @@ +const http = require('http'); -var debug = require('../../')('http') - , http = require('http') - , name = 'My App'; +const debug = require('../..')('http'); -// fake app +const name = 'My App'; + +// Fake app debug('booting %o', name); -http.createServer(function(req, res){ - debug(req.method + ' ' + req.url); - res.end('hello\n'); -}).listen(3000, function(){ - debug('listening'); +http.createServer((req, res) => { + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, () => { + debug('listening'); }); -// fake worker of some kind - +// Fake worker of some kind +// eslint-disable-next-line import/no-unassigned-import require('./worker'); diff --git a/examples/node/colors.js b/examples/node/colors.js index c144ee4e..9cbfa1f9 100644 --- a/examples/node/colors.js +++ b/examples/node/colors.js @@ -1,8 +1,8 @@ -var debug = require('../../') +const debug = require('../..'); -debug.enable('*') +debug.enable('*'); -for (var i=0; i < debug.colors.length; i++) { - const d = debug('example:' + i); - d('The color is %o', d.color); +for (let i = 0; i < debug.colors.length; i++) { + const d = debug('example:' + i); + d('The color is %o', d.color); } diff --git a/examples/node/stdout.js b/examples/node/stdout.js index c999c4c0..17558da0 100644 --- a/examples/node/stdout.js +++ b/examples/node/stdout.js @@ -1,16 +1,17 @@ -var debug = require('../../'); -var error = debug('app:error'); +const debug = require('../..'); -// by default stderr is used +const error = debug('app:error'); + +// By default stderr is used error('goes to stderr!'); -var log = debug('app:log'); -// set this namespace to log via console.log -log.log = console.log.bind(console); // don't forget to bind to console! +const log = debug('app:log'); +// Set this namespace to log via console.log +log.log = console.log.bind(console); // Don't forget to bind to console! log('goes to stdout'); error('still goes to stderr!'); -// set all output to go via console.info +// Set all output to go via console.info // overrides all per-namespace log settings debug.log = console.info.bind(console); error('now goes to stdout via console.info'); diff --git a/examples/node/wildcards.js b/examples/node/wildcards.js index ca99aeff..2cedc2d8 100644 --- a/examples/node/wildcards.js +++ b/examples/node/wildcards.js @@ -1,10 +1,10 @@ -var debug = { - foo: require('../../')('test:foo'), - bar: require('../../')('test:bar'), - baz: require('../../')('test:baz') +const debug = { + foo: require('../..')('test:foo'), + bar: require('../..')('test:bar'), + baz: require('../..')('test:baz') }; -debug.foo('foo') -debug.bar('bar') -debug.baz('baz') +debug.foo('foo'); +debug.bar('bar'); +debug.baz('baz'); diff --git a/examples/node/worker.js b/examples/node/worker.js index 07e3bc59..6f483a66 100644 --- a/examples/node/worker.js +++ b/examples/node/worker.js @@ -4,23 +4,24 @@ // DEBUG=worker:a node example/worker // DEBUG=worker:b node example/worker -var a = require('../../')('worker:a') - , b = require('../../')('worker:b'); +const a = require('../..')('worker:a'); + +const b = require('../..')('worker:b'); function work() { - a('doing lots of uninteresting work'); - setTimeout(work, Math.random() * 1000); + a('doing lots of uninteresting work'); + setTimeout(work, Math.random() * 1000); } work(); function workb() { - b('doing some work'); - setTimeout(workb, Math.random() * 2000); + b('doing some work'); + setTimeout(workb, Math.random() * 2000); } workb(); -setTimeout(function(){ - b(new Error('fail')); +setTimeout(() => { + b(new Error('fail')); }, 5000); diff --git a/karma.conf.js b/karma.conf.js index 103a82d1..82f90691 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,70 +1,60 @@ // Karma configuration // Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC) -module.exports = function(config) { - config.set({ - - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', - - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha', 'chai', 'sinon'], - - - // list of files / patterns to load in the browser - files: [ - 'dist/debug.js', - 'test/*spec.js' - ], - - - // list of files to exclude - exclude: [ - 'src/node.js' - ], - - - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - }, - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress'], - - - // web server port - port: 9876, - - - // enable / disable colors in the output (reporters and logs) - colors: true, - - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['PhantomJS'], - - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: false, - - // Concurrency level - // how many browser should be started simultaneous - concurrency: Infinity - }) -} +module.exports = function (config) { + config.set({ + + // Base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + // Frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['mocha', 'chai', 'sinon'], + + // List of files / patterns to load in the browser + files: [ + 'dist/debug.js', + 'test/*spec.js' + ], + + // List of files to exclude + exclude: [ + 'src/node.js' + ], + + // Preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + }, + + // Test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress'], + + // Web server port + port: 9876, + + // Enable / disable colors in the output (reporters and logs) + colors: true, + + // Level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + // Enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + // Start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['PhantomJS'], + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: false, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity + }); +}; diff --git a/package.json b/package.json index 4e922381..1f9b3640 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,9 @@ "url": "git://github.com/visionmedia/debug.git" }, "description": "small debugging utility", + "scripts": { + "test": "xo && mocha" + }, "keywords": [ "debug", "log", diff --git a/src/browser.js b/src/browser.js index b6d94e17..5f34c0d0 100644 --- a/src/browser.js +++ b/src/browser.js @@ -1,3 +1,5 @@ +/* eslint-env browser */ + /** * This is the web browser implementation of `debug()`. */ @@ -14,17 +16,82 @@ exports.storage = localstorage(); */ 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' ]; /** @@ -35,29 +102,30 @@ exports.colors = [ * TODO: add a `localStorage` variable to explicitly enable/disable colors */ +// 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' || 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; - } - - // 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+)/)); + // 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; + } + + // 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+)/)); } /** @@ -67,36 +135,38 @@ function useColors() { */ function formatArgs(args) { - var useColors = this.useColors; - - args[0] = (useColors ? '%c' : '') - + this.namespace - + (useColors ? ' %c' : ' ') - + args[0] - + (useColors ? '%c ' : ' ') - + '+' + module.exports.humanize(this.diff); - - if (!useColors) return; - - 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 - 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[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const 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; + } + }); + + args.splice(lastC, 0, c); } /** @@ -105,13 +175,12 @@ function formatArgs(args) { * * @api public */ - -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); } /** @@ -120,15 +189,17 @@ function log() { * @param {String} namespaces * @api private */ - function save(namespaces) { - try { - if (null == namespaces) { - exports.storage.removeItem('debug'); - } else { - exports.storage.setItem('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? + } } /** @@ -137,19 +208,21 @@ function save(namespaces) { * @return {String} returns the previously persisted debug modes * @api private */ - function load() { - var r; - try { - r = exports.storage.getItem('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; } /** @@ -164,25 +237,28 @@ function load() { */ function localstorage() { - 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 (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); -var formatters = module.exports.formatters; +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 (err) { - return '[UnexpectedJSONParseError]: ' + err.message; - } +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } }; diff --git a/src/common.js b/src/common.js index 65713e4d..dab9e480 100644 --- a/src/common.js +++ b/src/common.js @@ -4,237 +4,242 @@ * implementations of `debug()`. */ -module.exports = function setup(env) { - createDebug.debug = createDebug['default'] = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = require('ms'); - - Object.keys(env).forEach(function(key) { - createDebug[key] = env[key]; - }); - - /** - * Active `debug` instances. - */ - createDebug.instances = []; - - /** - * The currently active debug mode names, and names to skip. - */ - - createDebug.names = []; - createDebug.skips = []; - - /** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - - createDebug.formatters = {}; - - /** - * Select a color. - * @param {String} namespace - * @return {Number} - * @api private - */ - - function selectColor(namespace) { - var hash = 0, i; - - for (i in namespace) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - - return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; - - /** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - - function createDebug(namespace) { - var prevTime; - - function debug() { - // disabled? - if (!debug.enabled) return; - - var self = debug; - - // set `diff` timestamp - var curr = +new Date(); - var ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - - // turn the `arguments` into a proper Array - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - - args[0] = createDebug.coerce(args[0]); - - if ('string' !== typeof args[0]) { - // anything else let's inspect with %O - args.unshift('%O'); - } - - // apply any `formatters` transformations - var index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { - // if we encounter an escaped % then don't increase the array index - if (match === '%%') return match; - index++; - var formatter = createDebug.formatters[format]; - if ('function' === typeof formatter) { - var val = args[index]; - match = formatter.call(self, val); - - // now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); - - // apply env-specific formatting (colors, etc.) - createDebug.formatArgs.call(self, args); - - var logFn = self.log || createDebug.log; - logFn.apply(self, args); - } - - debug.namespace = namespace; - debug.enabled = createDebug.enabled(namespace); - debug.useColors = createDebug.useColors(); - debug.color = selectColor(namespace); - debug.destroy = destroy; - debug.extend = extend; - //debug.formatArgs = formatArgs; - //debug.rawLog = rawLog; - - // env-specific initialization logic for debug instances - if ('function' === typeof createDebug.init) { - createDebug.init(debug); - } - - createDebug.instances.push(debug); - - return debug; - } - - function destroy () { - var index = createDebug.instances.indexOf(this); - if (index !== -1) { - createDebug.instances.splice(index, 1); - return true; - } else { - return false; - } - } - - function extend (namespace, delimiter) { - return createDebug(this.namespace + (typeof delimiter !== 'undefined' ? delimiter : ':') + namespace); - } - - /** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - - function enable(namespaces) { - createDebug.save(namespaces); - - createDebug.names = []; - createDebug.skips = []; - - var i; - var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - var len = split.length; - - for (i = 0; i < len; i++) { - if (!split[i]) continue; // ignore empty strings - namespaces = split[i].replace(/\*/g, '.*?'); - if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - createDebug.names.push(new RegExp('^' + namespaces + '$')); - } - } - - for (i = 0; i < createDebug.instances.length; i++) { - var instance = createDebug.instances[i]; - instance.enabled = createDebug.enabled(instance.namespace); - } - } - - /** - * Disable debug output. - * - * @api public - */ - - function disable() { - createDebug.enable(''); - } - - /** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - - function enabled(name) { - if (name[name.length - 1] === '*') { - return true; - } - var i, len; - for (i = 0, len = createDebug.skips.length; i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } - for (i = 0, len = createDebug.names.length; i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } - return false; - } - - /** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - - function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; - } - - createDebug.enable(createDebug.load()); - - return createDebug; +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require('ms'); + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * Active `debug` instances. + */ + createDebug.instances = []; + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return match; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = createDebug.enabled(namespace); + debug.useColors = createDebug.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + debug.extend = extend; + // Debug.formatArgs = formatArgs; + // debug.rawLog = rawLog; + + // env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + createDebug.instances.push(debug); + + return debug; + } + + function destroy() { + const index = createDebug.instances.indexOf(this); + if (index !== -1) { + createDebug.instances.splice(index, 1); + return true; + } + return false; + } + + function extend(namespace, delimiter) { + return createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + + createDebug.names = []; + createDebug.skips = []; + + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + + for (i = 0; i < createDebug.instances.length; i++) { + const instance = createDebug.instances[i]; + instance.enabled = createDebug.enabled(instance.namespace); + } + } + + /** + * Disable debug output. + * + * @api public + */ + function disable() { + createDebug.enable(''); + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + let i; + let len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + createDebug.enable(createDebug.load()); + + return createDebug; } + +module.exports = setup; diff --git a/src/index.js b/src/index.js index a8792cc1..bf4c57f2 100644 --- a/src/index.js +++ b/src/index.js @@ -3,9 +3,8 @@ * treat as a browser. */ - if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { - module.exports = require('./browser.js'); + module.exports = require('./browser.js'); } else { - module.exports = require('./node.js'); + module.exports = require('./node.js'); } diff --git a/src/node.js b/src/node.js index c13b932c..5e1f1541 100644 --- a/src/node.js +++ b/src/node.js @@ -2,8 +2,8 @@ * Module dependencies. */ -var tty = require('tty'); -var util = require('util'); +const tty = require('tty'); +const util = require('util'); /** * This is the Node.js implementation of `debug()`. @@ -20,21 +20,95 @@ exports.useColors = useColors; * Colors. */ -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.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 (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. } /** @@ -43,24 +117,31 @@ try { * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js */ -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() }); - - // 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); - - obj[prop] = val; - return obj; +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 + 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; }, {}); /** @@ -68,9 +149,9 @@ exports.inspectOpts = Object.keys(process.env).filter(function (key) { */ 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); } /** @@ -80,35 +161,33 @@ function useColors() { */ function formatArgs(args) { - var name = this.namespace; - var useColors = this.useColors; - - if (useColors) { - var c = this.color; - var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c); - var 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]; - } + 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 ''; - } else { - return new Date().toISOString() + ' '; - } + if (exports.inspectOpts.hideDate) { + return ''; + } + return new Date().toISOString() + ' '; } /** * Invokes `util.format()` with the specified arguments and writes to stderr. */ -function log() { - return process.stderr.write(util.format.apply(util, arguments) + '\n'); +function log(...args) { + return process.stderr.write(util.format(...args) + '\n'); } /** @@ -117,15 +196,14 @@ function log() { * @param {String} namespaces * @api private */ - 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; + } } /** @@ -136,7 +214,7 @@ function save(namespaces) { */ function load() { - return process.env.DEBUG; + return process.env.DEBUG; } /** @@ -146,34 +224,34 @@ function load() { * differently for a particular `debug` instance. */ -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); -var formatters = module.exports.formatters; +const {formatters} = module.exports; /** * Map %o to `util.inspect()`, all on a single line. */ -formatters.o = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts) - .replace(/\s*\n\s*/g, ' '); +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); +formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); }; diff --git a/test/debug-spec.js b/test/debug-spec.js new file mode 100644 index 00000000..08edb3b3 --- /dev/null +++ b/test/debug-spec.js @@ -0,0 +1,92 @@ +/* global describe, it, context, beforeEach */ +'use strict'; + +let chai; + +let expect; + +let debug; + +let sinon; + +let sinonChai; + +if (typeof module !== 'undefined') { + chai = require('chai'); + expect = chai.expect; + + debug = require('../src'); + sinon = require('sinon'); + sinonChai = require('sinon-chai'); + chai.use(sinonChai); +} + +describe('debug', () => { + let log = debug('test'); + + log.log = sinon.stub(); + + it('passes a basic sanity check', () => { + expect(log('hello world')).to.not.throw(); + }); + + it('allows namespaces to be a non-string value', () => { + expect(debug.enable(true)).to.not.throw(); + }); + + context('with log function', () => { + beforeEach(() => { + debug.enable('test'); + log = debug('test'); + }); + + it('uses it', () => { + log.log = sinon.stub(); + log('using custom log function'); + + expect(log.log).to.have.been.calledOnce(); + }); + }); + + describe('custom functions', () => { + let log; + + beforeEach(() => { + debug.enable('test'); + log = debug('test'); + }); + + context('with log function', () => { + it('uses it', () => { + log.log = sinon.spy(); + log('using custom log function'); + + expect(log.log).to.have.been.calledOnce(); + }); + }); + }); + + describe('extend namespace', () => { + let log; + + beforeEach(() => { + debug.enable('foo'); + log = debug('foo'); + }); + + it('should extend namespace', () => { + const logBar = log.extend('bar'); + expect(logBar.namespace).to.be.equal('foo:bar'); + }); + + it('should extend namespace with custom delimiter', () => { + const logBar = log.extend('bar', '--'); + expect(logBar.namespace).to.be.equal('foo--bar'); + }); + + it('should extend namespace with empty delimiter', () => { + const logBar = log.extend('bar', ''); + expect(logBar.namespace).to.be.equal('foobar'); + }); + }); +}); diff --git a/test/debug_spec.js b/test/debug_spec.js deleted file mode 100644 index 7ac6d7cd..00000000 --- a/test/debug_spec.js +++ /dev/null @@ -1,93 +0,0 @@ -/* global describe, it, context, beforeEach */ -'use strict'; - -var chai - , expect - , debug - , sinon - , sinonChai; - -if (typeof module !== 'undefined') { - chai = require('chai'); - expect = chai.expect; - - debug = require('../src/index'); - sinon = require('sinon'); - sinonChai = require("sinon-chai"); - chai.use(sinonChai); -} - - -describe('debug', function () { - var log = debug('test'); - - log.log = sinon.stub(); - - it('passes a basic sanity check', function () { - expect(log('hello world')).to.not.throw; - }); - - it('allows namespaces to be a non-string value', function () { - expect(debug.enable(true)).to.not.throw; - }); - - context('with log function', function () { - - beforeEach(function () { - debug.enable('test'); - log = debug('test'); - }); - - it('uses it', function () { - log.log = sinon.stub(); - log('using custom log function'); - - expect(log.log).to.have.been.calledOnce; - }); - }); - - describe('custom functions', function () { - var log; - - beforeEach(function () { - debug.enable('test'); - log = debug('test'); - }); - - context('with log function', function () { - it('uses it', function () { - log.log = sinon.spy(); - log('using custom log function'); - - expect(log.log).to.have.been.calledOnce; - }); - }); - }); - - - describe('extend namespace', function () { - var log; - - beforeEach(function () { - debug.enable('foo'); - log = debug('foo'); - }); - - it('should extend namespace', function () { - var logBar = log.extend('bar'); - expect(logBar.namespace).to.be.equal('foo:bar'); - }); - - it('should extend namespace with custom delimiter', function () { - var logBar = log.extend('bar', '--'); - expect(logBar.namespace).to.be.equal('foo--bar'); - }); - - it('should extend namespace with empty delimiter', function () { - var logBar = log.extend('bar', ''); - expect(logBar.namespace).to.be.equal('foobar'); - }); - - }); - -}); From 833b6f84c8f8dc5b6f13da38ab0ef8a8ff86c0c9 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 10 Sep 2018 22:34:47 -0600 Subject: [PATCH 060/118] fix tests --- package.json | 3 -- test/debug-spec.js | 84 +++++++++++++++++++++------------------------- 2 files changed, 38 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index 1f9b3640..1907cda9 100644 --- a/package.json +++ b/package.json @@ -34,12 +34,9 @@ "karma-chai": "^0.1.0", "karma-mocha": "^1.3.0", "karma-phantomjs-launcher": "^1.0.2", - "karma-sinon": "^1.0.5", "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" }, "main": "./src/index.js", diff --git a/test/debug-spec.js b/test/debug-spec.js index 08edb3b3..6862497e 100644 --- a/test/debug-spec.js +++ b/test/debug-spec.js @@ -1,4 +1,4 @@ -/* global describe, it, context, beforeEach */ +/* eslint-env mocha */ 'use strict'; let chai; @@ -7,84 +7,76 @@ let expect; let debug; -let sinon; - -let sinonChai; - if (typeof module !== 'undefined') { chai = require('chai'); expect = chai.expect; - debug = require('../src'); - sinon = require('sinon'); - sinonChai = require('sinon-chai'); - chai.use(sinonChai); } describe('debug', () => { - let log = debug('test'); - - log.log = sinon.stub(); - it('passes a basic sanity check', () => { - expect(log('hello world')).to.not.throw(); + const log = debug('test'); + log.enabled = true; + log.log = () => {}; + + expect(() => log('hello world')).to.not.throw(); }); it('allows namespaces to be a non-string value', () => { - expect(debug.enable(true)).to.not.throw(); - }); + const log = debug('test'); + log.enabled = true; + log.log = () => {}; - context('with log function', () => { - beforeEach(() => { - debug.enable('test'); - log = debug('test'); - }); + expect(() => debug.enable(true)).to.not.throw(); + }); - it('uses it', () => { - log.log = sinon.stub(); - log('using custom log function'); + it('honors global debug namespace enable calls', () => { + expect(debug('test:12345').enabled).to.equal(false); + expect(debug('test:67890').enabled).to.equal(false); - expect(log.log).to.have.been.calledOnce(); - }); + debug.enable('test:12345'); + expect(debug('test:12345').enabled).to.equal(true); + expect(debug('test:67890').enabled).to.equal(false); }); - describe('custom functions', () => { - let log; + it('uses custom log function', () => { + const log = debug('test'); + log.enabled = true; - beforeEach(() => { - debug.enable('test'); - log = debug('test'); - }); + const messages = []; + log.log = (...args) => messages.push(args); - context('with log function', () => { - it('uses it', () => { - log.log = sinon.spy(); - log('using custom log function'); + log('using custom log function'); + log('using custom log function again'); + log('%O', 12345); - expect(log.log).to.have.been.calledOnce(); - }); - }); + expect(messages.length).to.equal(3); }); describe('extend namespace', () => { - let log; - - beforeEach(() => { - debug.enable('foo'); - log = debug('foo'); - }); - it('should extend namespace', () => { + const log = debug('foo'); + log.enabled = true; + log.log = () => {}; + const logBar = log.extend('bar'); expect(logBar.namespace).to.be.equal('foo:bar'); }); it('should extend namespace with custom delimiter', () => { + const log = debug('foo'); + log.enabled = true; + log.log = () => {}; + const logBar = log.extend('bar', '--'); expect(logBar.namespace).to.be.equal('foo--bar'); }); it('should extend namespace with empty delimiter', () => { + const log = debug('foo'); + log.enabled = true; + log.log = () => {}; + const logBar = log.extend('bar', ''); expect(logBar.namespace).to.be.equal('foobar'); }); From 62822f12668e8a0b1d1a4fd5a1c2fce1d8715da3 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 10 Sep 2018 22:43:04 -0600 Subject: [PATCH 061/118] clean up makefile --- Makefile | 30 +++++++----------------------- package.json | 4 ---- 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/Makefile b/Makefile index 3ddd1360..48e66bc7 100644 --- a/Makefile +++ b/Makefile @@ -15,22 +15,16 @@ YARN ?= $(shell which yarn) PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm)) BROWSERIFY ?= $(NODE) $(BIN)/browserify -install: node_modules +all: lint test browser: dist/debug.js -node_modules: package.json - @NODE_ENV= $(PKG) install - @touch node_modules - -dist/debug.js: src/*.js node_modules +dist/debug.js: src/*.js @mkdir -p dist - @$(BROWSERIFY) \ - --standalone debug \ - . > dist/debug.js + @$(BROWSERIFY) --standalone debug . > dist/debug.js lint: - @eslint *.js src/*.js + @xo test-node: @istanbul cover node_modules/mocha/bin/_mocha -- test/**.js @@ -40,19 +34,9 @@ test-browser: @$(MAKE) browser @karma start --single-run -test-all: - @concurrently \ - "make test-node" \ - "make test-browser" - -test: - @if [ "x$(BROWSER)" = "x" ]; then \ - $(MAKE) test-node; \ - else \ - $(MAKE) test-browser; \ - fi +test: test-node test-browser clean: - rimraf dist coverage + rm -rf dist coverage -.PHONY: browser install clean lint test test-all test-node test-browser +.PHONY: all browser install clean lint test test-node test-browser diff --git a/package.json b/package.json index 1907cda9..c6f613c2 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,6 @@ "url": "git://github.com/visionmedia/debug.git" }, "description": "small debugging utility", - "scripts": { - "test": "xo && mocha" - }, "keywords": [ "debug", "log", @@ -28,7 +25,6 @@ "chai": "^3.5.0", "concurrently": "^3.1.0", "coveralls": "^3.0.2", - "eslint": "^3.12.1", "istanbul": "^0.4.5", "karma": "^3.0.0", "karma-chai": "^0.1.0", From 57cde56e43003f6b404d4b3d9d76b74aafaeeec8 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 10 Sep 2018 23:07:20 -0600 Subject: [PATCH 062/118] fix tests --- .babelrc | 13 +++++++++++++ .travis.yml | 5 ++--- Makefile | 14 +++++++++++--- karma.conf.js | 4 ++-- package.json | 3 +++ test/debug-spec.js => test.js | 2 +- 6 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 .babelrc rename test/debug-spec.js => test.js (98%) diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..b2799de4 --- /dev/null +++ b/.babelrc @@ -0,0 +1,13 @@ +{ + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "chrome": "58", + "ie": "8" + } + } + ] + ] +} diff --git a/.travis.yml b/.travis.yml index 05f3dbb2..fca0ce19 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,11 +8,10 @@ node_js: - "10" install: - - make install + - npm install script: - - make lint - - make test + - make all matrix: include: diff --git a/Makefile b/Makefile index 48e66bc7..3651a92d 100644 --- a/Makefile +++ b/Makefile @@ -17,17 +17,25 @@ BROWSERIFY ?= $(NODE) $(BIN)/browserify all: lint test -browser: dist/debug.js +browser: dist/debug.js dist/test.js dist/debug.js: src/*.js @mkdir -p dist - @$(BROWSERIFY) --standalone debug . > dist/debug.js + @$(BROWSERIFY) --standalone debug . > $@.es6.js + @babel $@.es6.js > $@ + @rm $@.es6.js + +dist/test.js: test.js + @mkdir -p dist + @cp $< $@.es6.js + @babel $@.es6.js > $@ + @rm $@.es6.js lint: @xo test-node: - @istanbul cover node_modules/mocha/bin/_mocha -- test/**.js + @istanbul cover node_modules/mocha/bin/_mocha -- test.js @cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js test-browser: diff --git a/karma.conf.js b/karma.conf.js index 82f90691..e503df20 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -9,12 +9,12 @@ module.exports = function (config) { // Frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha', 'chai', 'sinon'], + frameworks: ['mocha', 'chai'], // List of files / patterns to load in the browser files: [ 'dist/debug.js', - 'test/*spec.js' + 'dist/test.js' ], // List of files to exclude diff --git a/package.json b/package.json index c6f613c2..6a15aed3 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,9 @@ "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", diff --git a/test/debug-spec.js b/test.js similarity index 98% rename from test/debug-spec.js rename to test.js index 6862497e..675d0825 100644 --- a/test/debug-spec.js +++ b/test.js @@ -10,7 +10,7 @@ let debug; if (typeof module !== 'undefined') { chai = require('chai'); expect = chai.expect; - debug = require('../src'); + debug = require('./src'); } describe('debug', () => { From 623c08ef73f8211278d5596c88041c65a2a58ee7 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 10 Sep 2018 23:11:24 -0600 Subject: [PATCH 063/118] no longer checking for BROWSER=1 --- .travis.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index fca0ce19..c160e8d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,8 +12,3 @@ install: script: - make all - -matrix: - include: - - node_js: '8' - env: BROWSER=1 From 9f4f8f59ba745166b0c014a61c76de5e73d4841a Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 10 Sep 2018 23:11:33 -0600 Subject: [PATCH 064/118] remove needless command aliases in makefile --- Makefile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 3651a92d..663744fb 100644 --- a/Makefile +++ b/Makefile @@ -10,10 +10,7 @@ PATH := node_modules/.bin:$(PATH) SHELL := /bin/bash # applications -NODE ?= $(shell which node) -YARN ?= $(shell which yarn) -PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm)) -BROWSERIFY ?= $(NODE) $(BIN)/browserify +BROWSERIFY ?= $(BIN)/browserify all: lint test From 3ca23316a470f6bc6e0d75d297179cfc19bbc763 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 10 Sep 2018 23:45:28 -0600 Subject: [PATCH 065/118] clean up builds --- .npmignore | 15 --------------- Makefile | 40 ++++++++++++++++------------------------ node.js | 1 - package.json | 6 ++++++ 4 files changed, 22 insertions(+), 40 deletions(-) delete mode 100644 .npmignore delete mode 100644 node.js diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 9c93383c..00000000 --- a/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -support -test -examples -example -*.sock -dist -yarn.lock -coverage -bower.json -.coveralls.yml -.eslintrc -.travis.yml -.npmignore -karma.conf.js -Makefile diff --git a/Makefile b/Makefile index 663744fb..e28468e6 100644 --- a/Makefile +++ b/Makefile @@ -1,47 +1,39 @@ -# get Makefile directory name: http://stackoverflow.com/a/5982798/376773 +# http://stackoverflow.com/a/5982798/376773 THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) - -# BIN directory -BIN := $(THIS_DIR)/node_modules/.bin - -# Path -PATH := node_modules/.bin:$(PATH) +export PATH := $(THIS_DIR)/node_modules/.bin:$(PATH) SHELL := /bin/bash -# applications -BROWSERIFY ?= $(BIN)/browserify - all: lint test -browser: dist/debug.js dist/test.js +dist: dist/debug.js dist/test.js + +.INTERMEDIATE: dist/debug.es6.js +dist/debug.es6.js: src/*.js + @mkdir -p dist + browserify --standalone debug $< > $@ -dist/debug.js: src/*.js +dist/debug.js: dist/debug.es6.js @mkdir -p dist - @$(BROWSERIFY) --standalone debug . > $@.es6.js - @babel $@.es6.js > $@ - @rm $@.es6.js + babel $< > $@ dist/test.js: test.js @mkdir -p dist - @cp $< $@.es6.js - @babel $@.es6.js > $@ - @rm $@.es6.js + babel $< > $@ lint: - @xo + xo test-node: - @istanbul cover node_modules/mocha/bin/_mocha -- test.js + istanbul cover node_modules/mocha/bin/_mocha -- test.js @cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js -test-browser: - @$(MAKE) browser - @karma start --single-run +test-browser: dist + karma start --single-run test: test-node test-browser clean: rm -rf dist coverage -.PHONY: all browser install clean lint test test-node test-browser +.PHONY: all dist clean lint test test-node test-browser diff --git a/node.js b/node.js deleted file mode 100644 index 7fc36fe6..00000000 --- a/node.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./src/node'); diff --git a/package.json b/package.json index 6a15aed3..c07c03b3 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,12 @@ "log", "debugger" ], + "files": [ + "src", + "dist/debug.js", + "LICENSE", + "README.md" + ], "author": "TJ Holowaychuk ", "contributors": [ "Nathan Rajlich (http://n8.io)", From dec4b159ddf63915c94cd9d8421ad11cd06f0e76 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Tue, 11 Sep 2018 00:12:55 -0600 Subject: [PATCH 066/118] 3.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c07c03b3..1bbaa207 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "3.1.0", + "version": "3.2.0", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From b3f8f8e683915ef4fae3a77cbcebc6c410e65a8c Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Tue, 11 Sep 2018 00:25:34 -0600 Subject: [PATCH 067/118] use babel-ified distributed source for browsers --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1bbaa207..c727ec02 100644 --- a/package.json +++ b/package.json @@ -45,5 +45,5 @@ "xo": "^0.23.0" }, "main": "./src/index.js", - "browser": "./src/browser.js" + "browser": "./dist/debug.js" } From 84e41d52acfdaa00ac724277f8c73a550be6916d Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Tue, 11 Sep 2018 00:25:52 -0600 Subject: [PATCH 068/118] 3.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c727ec02..4852a37f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "3.2.0", + "version": "3.2.1", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From 7fb104b8cfcbc3a91d8e4a6727638c3fe24be8d2 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Tue, 11 Sep 2018 02:56:30 -0600 Subject: [PATCH 069/118] 4.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4852a37f..7b1923b9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "3.2.1", + "version": "4.0.0", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From 99c95e3d54b07a918ad65bc148a2930ea8bfdd02 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Tue, 11 Sep 2018 15:35:13 -0600 Subject: [PATCH 070/118] fix browserify and supply alternative unpkg entry point (closes #606) --- Makefile | 2 +- package.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index e28468e6..5d91c19c 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ dist: dist/debug.js dist/test.js .INTERMEDIATE: dist/debug.es6.js dist/debug.es6.js: src/*.js @mkdir -p dist - browserify --standalone debug $< > $@ + browserify --standalone debug . > $@ dist/debug.js: dist/debug.es6.js @mkdir -p dist diff --git a/package.json b/package.json index 7b1923b9..8d8df5e6 100644 --- a/package.json +++ b/package.json @@ -45,5 +45,6 @@ "xo": "^0.23.0" }, "main": "./src/index.js", - "browser": "./dist/debug.js" + "browser": "./src/browser.js", + "unpkg": "./dist/debug.js" } From 4490cd95bfb952e1ed756914ac225ddc987b2ba3 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Tue, 11 Sep 2018 17:16:06 -0600 Subject: [PATCH 071/118] 4.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8d8df5e6..cecd5ac5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "4.0.0", + "version": "4.0.1", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From 4236585a40787fe60ed625452163299600df2ce6 Mon Sep 17 00:00:00 2001 From: Outsider Date: Tue, 2 Oct 2018 22:44:35 +0900 Subject: [PATCH 072/118] migrate Makefile to npm scripts Signed-off-by: Outsider --- .travis.yml | 3 ++- Makefile | 39 --------------------------------------- package.json | 13 +++++++++++++ 3 files changed, 15 insertions(+), 40 deletions(-) delete mode 100644 Makefile diff --git a/.travis.yml b/.travis.yml index c160e8d3..24682db3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,4 +11,5 @@ install: - npm install script: - - make all + - npm run lint + - npm test diff --git a/Makefile b/Makefile deleted file mode 100644 index 5d91c19c..00000000 --- a/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# http://stackoverflow.com/a/5982798/376773 -THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) -THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) -export PATH := $(THIS_DIR)/node_modules/.bin:$(PATH) -SHELL := /bin/bash - -all: lint test - -dist: dist/debug.js dist/test.js - -.INTERMEDIATE: dist/debug.es6.js -dist/debug.es6.js: src/*.js - @mkdir -p dist - browserify --standalone debug . > $@ - -dist/debug.js: dist/debug.es6.js - @mkdir -p dist - babel $< > $@ - -dist/test.js: test.js - @mkdir -p dist - babel $< > $@ - -lint: - xo - -test-node: - istanbul cover node_modules/mocha/bin/_mocha -- test.js - @cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js - -test-browser: dist - karma start --single-run - -test: test-node test-browser - -clean: - rm -rf dist coverage - -.PHONY: all dist clean lint test test-node test-browser diff --git a/package.json b/package.json index cecd5ac5..0c8aa48e 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,19 @@ "Andrew Rhyne " ], "license": "MIT", + "scripts": { + "lint": "xo", + "test": "npm run test:node && npm run test:browser", + "test:node": "istanbul cover _mocha -- test.js", + "posttest:node": "cat ./coverage/lcov.info | coveralls", + "pretest:browser": "npm run build", + "test:browser": "karma start --single-run", + "prebuild:debug": "mkdir -p dist && browserify --standalone debug -o dist/debug.es6.js .", + "build:debug": "babel -o dist/debug.js dist/debug.es6.js > dist/debug.js", + "build:test": "babel -d dist test.js", + "build": "npm run build:debug && npm run build:test", + "clean": "rimraf dist coverage" + }, "dependencies": { "ms": "^2.1.1" }, From 7ef8b417a86941372074f749019b9f439a1f6ef6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20B=C3=B8cker-Larsen?= Date: Thu, 4 Oct 2018 09:45:22 +0800 Subject: [PATCH 073/118] feat: Return namespaces string when invoking disable() feat: Add unit tests for disable return value fix: Correct spelling in test case description feat: Test that disable-string works with enable again Closes #523 docs: Add section about disable return value --- README.md | 18 ++++++++++++++++++ src/common.js | 19 +++++++++++++++++++ test.js | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+) diff --git a/README.md b/README.md index 0ee7634d..88dae35d 100644 --- a/README.md +++ b/README.md @@ -317,6 +317,24 @@ $ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log( => false ``` +`disable()` + +Will disable all namespaces. The functions returns the namespaces currently +enabled (and skipped). This can be useful if you want to disable debugging +temporarily without knowing what was enabled to begin with. + +For example: + +```js +let debug = require('debug'); +debug.enable('foo:*,-foo:bar'); +let namespaces = debug.disable(); +debug.enable(namespaces); +``` + +Note: There is no guarantee that the string will be identical to the initial +enable string, but semantically they will be identical. + ## Checking whether a debug target is enabled After you've created a debug instance, you can determine whether or not it is diff --git a/src/common.js b/src/common.js index dab9e480..0b6d0b64 100644 --- a/src/common.js +++ b/src/common.js @@ -187,10 +187,16 @@ function setup(env) { /** * Disable debug output. * + * @return {String} namespaces * @api public */ function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); createDebug.enable(''); + return namespaces; } /** @@ -223,6 +229,19 @@ function setup(env) { return false; } + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + /** * Coerce `val`. * diff --git a/test.js b/test.js index 675d0825..888f9bd8 100644 --- a/test.js +++ b/test.js @@ -81,4 +81,43 @@ describe('debug', () => { expect(logBar.namespace).to.be.equal('foobar'); }); }); + + describe('rebuild namespaces string (disable)', () => { + it('handle names, skips, and wildcards', () => { + debug.enable('test,abc*,-abc'); + const namespaces = debug.disable(); + expect(namespaces).to.equal('test,abc*,-abc'); + }); + + it('handles empty', () => { + debug.enable(''); + const namespaces = debug.disable(); + expect(namespaces).to.equal(''); + expect(debug.names).to.deep.equal([]); + expect(debug.skips).to.deep.equal([]); + }); + + it('handles all', () => { + debug.enable('*'); + const namespaces = debug.disable(); + expect(namespaces).to.equal('*'); + }); + + it('handles skip all', () => { + debug.enable('-*'); + const namespaces = debug.disable(); + expect(namespaces).to.equal('-*'); + }); + + it('names+skips same with new string', () => { + debug.enable('test,abc*,-abc'); + const oldNames = [...debug.names]; + const oldSkips = [...debug.skips]; + const namespaces = debug.disable(); + expect(namespaces).to.equal('test,abc*,-abc'); + debug.enable(namespaces); + expect(oldNames.map(String)).to.deep.equal(debug.names.map(String)); + expect(oldSkips.map(String)).to.deep.equal(debug.skips.map(String)); + }); + }); }); From e30e8fdbc92c4cf6b3007cd1c3ad2c3cbb82be85 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Mon, 8 Oct 2018 04:09:42 -0600 Subject: [PATCH 074/118] 4.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0c8aa48e..0477a691 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "4.0.1", + "version": "4.1.0", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From 615cbb925f3a57f00d6bfeab881ad47f77a7e4c7 Mon Sep 17 00:00:00 2001 From: ossdev07 Date: Mon, 24 Sep 2018 15:53:42 +0530 Subject: [PATCH 075/118] debug: Replaced phantomJS by chrome Added script in package.json for running Test-suite Signed-off-by: ossdev07 --- karma.conf.js | 8 +++++++- package.json | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index e503df20..8a4d88c6 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -47,7 +47,13 @@ module.exports = function (config) { // Start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['PhantomJS'], + browsers: ['HeadlessChrome'], + customLaunchers: { + HeadlessChrome: { + base: 'ChromeHeadless', + flags: ['--no-sandbox',], + }, + }, // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits diff --git a/package.json b/package.json index 0477a691..a2dc7f31 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,9 @@ "dependencies": { "ms": "^2.1.1" }, + "scripts": { + "test": "mocha" + }, "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", @@ -48,10 +51,10 @@ "concurrently": "^3.1.0", "coveralls": "^3.0.2", "istanbul": "^0.4.5", - "karma": "^3.0.0", + "karma": "^2.0.0", "karma-chai": "^0.1.0", "karma-mocha": "^1.3.0", - "karma-phantomjs-launcher": "^1.0.2", + "karma-chrome-launcher": "^2.2.0", "mocha": "^5.2.0", "mocha-lcov-reporter": "^1.2.0", "rimraf": "^2.5.4", From 4fe746a44692a9fe55d24a3c0ff5e4f340519d90 Mon Sep 17 00:00:00 2001 From: ossdev07 <39188636+ossdev07@users.noreply.github.com> Date: Mon, 24 Sep 2018 16:15:28 +0530 Subject: [PATCH 076/118] Update karma.conf.js --- karma.conf.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index 8a4d88c6..c8033d79 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -48,12 +48,12 @@ module.exports = function (config) { // Start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: ['HeadlessChrome'], - customLaunchers: { - HeadlessChrome: { - base: 'ChromeHeadless', - flags: ['--no-sandbox',], - }, - }, + customLaunchers: { + HeadlessChrome: { + base: 'ChromeHeadless', + flags: ['--no-sandbox',], + }, + }, // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits From 61c94841a0cc48f33a8b5ac5f973ee75d74b7996 Mon Sep 17 00:00:00 2001 From: ossdev07 <39188636+ossdev07@users.noreply.github.com> Date: Mon, 24 Sep 2018 16:26:46 +0530 Subject: [PATCH 077/118] Update karma.conf.js --- karma.conf.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index c8033d79..fef8bf4c 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -48,12 +48,12 @@ module.exports = function (config) { // Start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: ['HeadlessChrome'], - customLaunchers: { - HeadlessChrome: { - base: 'ChromeHeadless', - flags: ['--no-sandbox',], - }, - }, + customLaunchers: { + HeadlessChrome: { + base: 'ChromeHeadless', + flags: ['--no-sandbox' ], + } + }, // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits From 7ea4076fd684df6ace0cb4eba64d17a3b711ba3a Mon Sep 17 00:00:00 2001 From: ossdev07 <39188636+ossdev07@users.noreply.github.com> Date: Mon, 24 Sep 2018 16:31:03 +0530 Subject: [PATCH 078/118] Update karma.conf.js --- karma.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karma.conf.js b/karma.conf.js index fef8bf4c..38f34571 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -51,7 +51,7 @@ module.exports = function (config) { customLaunchers: { HeadlessChrome: { base: 'ChromeHeadless', - flags: ['--no-sandbox' ], + flags: ['--no-sandbox'] } }, From dab648abd54abf3f0cc8862d7ba9628f616cf3fe Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 10 Oct 2018 01:03:02 -0600 Subject: [PATCH 079/118] remove second (shadow) scripts block --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index a2dc7f31..2e14fcbe 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,6 @@ "dependencies": { "ms": "^2.1.1" }, - "scripts": { - "test": "mocha" - }, "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", From 5fadf4544d32531a91519299f6850620c6a0221e Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Thu, 11 Oct 2018 05:56:04 -0600 Subject: [PATCH 080/118] deprecate CHANGELOG.md --- CHANGELOG.md | 397 +-------------------------------------------------- 1 file changed, 3 insertions(+), 394 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 820d21e3..97162b9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,395 +1,4 @@ +CHANGELOG.md has been deprecated moved to the Github releases pages. It will be removed in the future. -3.1.0 / 2017-09-26 -================== - - * Add `DEBUG_HIDE_DATE` env var (#486) - * Remove ReDoS regexp in %o formatter (#504) - * Remove "component" from package.json - * Remove `component.json` - * Ignore package-lock.json - * Examples: fix colors printout - * Fix: browser detection - * Fix: spelling mistake (#496, @EdwardBetts) - -3.0.1 / 2017-08-24 -================== - - * Fix: Disable colors in Edge and Internet Explorer (#489) - -3.0.0 / 2017-08-08 -================== - - * Breaking: Remove DEBUG_FD (#406) - * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418) - * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408) - * Addition: document `enabled` flag (#465) - * Addition: add 256 colors mode (#481) - * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440) - * Update: component: update "ms" to v2.0.0 - * Update: separate the Node and Browser tests in Travis-CI - * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots - * Update: separate Node.js and web browser examples for organization - * Update: update "browserify" to v14.4.0 - * Fix: fix Readme typo (#473) - -2.6.9 / 2017-09-22 -================== - - * remove ReDoS regexp in %o formatter (#504) - -2.6.8 / 2017-05-18 -================== - - * Fix: Check for undefined on browser globals (#462, @marbemac) - -2.6.7 / 2017-05-16 -================== - - * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom) - * Fix: Inline extend function in node implementation (#452, @dougwilson) - * Docs: Fix typo (#455, @msasad) - -2.6.5 / 2017-04-27 -================== - - * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek) - * Misc: clean up browser reference checks (#447, @thebigredgeek) - * Misc: add npm-debug.log to .gitignore (@thebigredgeek) - - -2.6.4 / 2017-04-20 -================== - - * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) - * Chore: ignore bower.json in npm installations. (#437, @joaovieira) - * Misc: update "ms" to v0.7.3 (@tootallnate) - -2.6.3 / 2017-03-13 -================== - - * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts) - * Docs: Changelog fix (@thebigredgeek) - -2.6.2 / 2017-03-10 -================== - - * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) - * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) - * Docs: Add Slackin invite badge (@tootallnate) - -2.6.1 / 2017-02-10 -================== - - * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error - * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) - * Fix: IE8 "Expected identifier" error (#414, @vgoma) - * Fix: Namespaces would not disable once enabled (#409, @musikov) - -2.6.0 / 2016-12-28 -================== - - * Fix: added better null pointer checks for browser useColors (@thebigredgeek) - * Improvement: removed explicit `window.debug` export (#404, @tootallnate) - * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) - -2.5.2 / 2016-12-25 -================== - - * Fix: reference error on window within webworkers (#393, @KlausTrainer) - * Docs: fixed README typo (#391, @lurch) - * Docs: added notice about v3 api discussion (@thebigredgeek) - -2.5.1 / 2016-12-20 -================== - - * Fix: babel-core compatibility - -2.5.0 / 2016-12-20 -================== - - * Fix: wrong reference in bower file (@thebigredgeek) - * Fix: webworker compatibility (@thebigredgeek) - * Fix: output formatting issue (#388, @kribblo) - * Fix: babel-loader compatibility (#383, @escwald) - * Misc: removed built asset from repo and publications (@thebigredgeek) - * Misc: moved source files to /src (#378, @yamikuronue) - * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) - * Test: coveralls integration (#378, @yamikuronue) - * Docs: simplified language in the opening paragraph (#373, @yamikuronue) - -2.4.5 / 2016-12-17 -================== - - * Fix: `navigator` undefined in Rhino (#376, @jochenberger) - * Fix: custom log function (#379, @hsiliev) - * Improvement: bit of cleanup + linting fixes (@thebigredgeek) - * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) - * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) - -2.4.4 / 2016-12-14 -================== - - * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) - -2.4.3 / 2016-12-14 -================== - - * Fix: navigation.userAgent error for react native (#364, @escwald) - -2.4.2 / 2016-12-14 -================== - - * Fix: browser colors (#367, @tootallnate) - * Misc: travis ci integration (@thebigredgeek) - * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) - -2.4.1 / 2016-12-13 -================== - - * Fix: typo that broke the package (#356) - -2.4.0 / 2016-12-13 -================== - - * Fix: bower.json references unbuilt src entry point (#342, @justmatt) - * Fix: revert "handle regex special characters" (@tootallnate) - * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) - * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) - * Improvement: allow colors in workers (#335, @botverse) - * Improvement: use same color for same namespace. (#338, @lchenay) - -2.3.3 / 2016-11-09 -================== - - * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) - * Fix: Returning `localStorage` saved values (#331, Levi Thomason) - * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) - -2.3.2 / 2016-11-09 -================== - - * Fix: be super-safe in index.js as well (@TooTallNate) - * Fix: should check whether process exists (Tom Newby) - -2.3.1 / 2016-11-09 -================== - - * Fix: Added electron compatibility (#324, @paulcbetts) - * Improvement: Added performance optimizations (@tootallnate) - * Readme: Corrected PowerShell environment variable example (#252, @gimre) - * Misc: Removed yarn lock file from source control (#321, @fengmk2) - -2.3.0 / 2016-11-07 -================== - - * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) - * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) - * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) - * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) - * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) - * Package: Update "ms" to 0.7.2 (#315, @DevSide) - * Package: removed superfluous version property from bower.json (#207 @kkirsche) - * Readme: fix USE_COLORS to DEBUG_COLORS - * Readme: Doc fixes for format string sugar (#269, @mlucool) - * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) - * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) - * Readme: better docs for browser support (#224, @matthewmueller) - * Tooling: Added yarn integration for development (#317, @thebigredgeek) - * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) - * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) - * Misc: Updated contributors (@thebigredgeek) - -2.2.0 / 2015-05-09 -================== - - * package: update "ms" to v0.7.1 (#202, @dougwilson) - * README: add logging to file example (#193, @DanielOchoa) - * README: fixed a typo (#191, @amir-s) - * browser: expose `storage` (#190, @stephenmathieson) - * Makefile: add a `distclean` target (#189, @stephenmathieson) - -2.1.3 / 2015-03-13 -================== - - * Updated stdout/stderr example (#186) - * Updated example/stdout.js to match debug current behaviour - * Renamed example/stderr.js to stdout.js - * Update Readme.md (#184) - * replace high intensity foreground color for bold (#182, #183) - -2.1.2 / 2015-03-01 -================== - - * dist: recompile - * update "ms" to v0.7.0 - * package: update "browserify" to v9.0.3 - * component: fix "ms.js" repo location - * changed bower package name - * updated documentation about using debug in a browser - * fix: security error on safari (#167, #168, @yields) - -2.1.1 / 2014-12-29 -================== - - * browser: use `typeof` to check for `console` existence - * browser: check for `console.log` truthiness (fix IE 8/9) - * browser: add support for Chrome apps - * Readme: added Windows usage remarks - * Add `bower.json` to properly support bower install - -2.1.0 / 2014-10-15 -================== - - * node: implement `DEBUG_FD` env variable support - * package: update "browserify" to v6.1.0 - * package: add "license" field to package.json (#135, @panuhorsmalahti) - -2.0.0 / 2014-09-01 -================== - - * package: update "browserify" to v5.11.0 - * node: use stderr rather than stdout for logging (#29, @stephenmathieson) - -1.0.4 / 2014-07-15 -================== - - * dist: recompile - * example: remove `console.info()` log usage - * example: add "Content-Type" UTF-8 header to browser example - * browser: place %c marker after the space character - * browser: reset the "content" color via `color: inherit` - * browser: add colors support for Firefox >= v31 - * debug: prefer an instance `log()` function over the global one (#119) - * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) - -1.0.3 / 2014-07-09 -================== - - * Add support for multiple wildcards in namespaces (#122, @seegno) - * browser: fix lint - -1.0.2 / 2014-06-10 -================== - - * browser: update color palette (#113, @gscottolson) - * common: make console logging function configurable (#108, @timoxley) - * node: fix %o colors on old node <= 0.8.x - * Makefile: find node path using shell/which (#109, @timoxley) - -1.0.1 / 2014-06-06 -================== - - * browser: use `removeItem()` to clear localStorage - * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) - * package: add "contributors" section - * node: fix comment typo - * README: list authors - -1.0.0 / 2014-06-04 -================== - - * make ms diff be global, not be scope - * debug: ignore empty strings in enable() - * node: make DEBUG_COLORS able to disable coloring - * *: export the `colors` array - * npmignore: don't publish the `dist` dir - * Makefile: refactor to use browserify - * package: add "browserify" as a dev dependency - * Readme: add Web Inspector Colors section - * node: reset terminal color for the debug content - * node: map "%o" to `util.inspect()` - * browser: map "%j" to `JSON.stringify()` - * debug: add custom "formatters" - * debug: use "ms" module for humanizing the diff - * Readme: add "bash" syntax highlighting - * browser: add Firebug color support - * browser: add colors for WebKit browsers - * node: apply log to `console` - * rewrite: abstract common logic for Node & browsers - * add .jshintrc file - -0.8.1 / 2014-04-14 -================== - - * package: re-add the "component" section - -0.8.0 / 2014-03-30 -================== - - * add `enable()` method for nodejs. Closes #27 - * change from stderr to stdout - * remove unnecessary index.js file - -0.7.4 / 2013-11-13 -================== - - * remove "browserify" key from package.json (fixes something in browserify) - -0.7.3 / 2013-10-30 -================== - - * fix: catch localStorage security error when cookies are blocked (Chrome) - * add debug(err) support. Closes #46 - * add .browser prop to package.json. Closes #42 - -0.7.2 / 2013-02-06 -================== - - * fix package.json - * fix: Mobile Safari (private mode) is broken with debug - * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript - -0.7.1 / 2013-02-05 -================== - - * add repository URL to package.json - * add DEBUG_COLORED to force colored output - * add browserify support - * fix component. Closes #24 - -0.7.0 / 2012-05-04 -================== - - * Added .component to package.json - * Added debug.component.js build - -0.6.0 / 2012-03-16 -================== - - * Added support for "-" prefix in DEBUG [Vinay Pulim] - * Added `.enabled` flag to the node version [TooTallNate] - -0.5.0 / 2012-02-02 -================== - - * Added: humanize diffs. Closes #8 - * Added `debug.disable()` to the CS variant - * Removed padding. Closes #10 - * Fixed: persist client-side variant again. Closes #9 - -0.4.0 / 2012-02-01 -================== - - * Added browser variant support for older browsers [TooTallNate] - * Added `debug.enable('project:*')` to browser variant [TooTallNate] - * Added padding to diff (moved it to the right) - -0.3.0 / 2012-01-26 -================== - - * Added millisecond diff when isatty, otherwise UTC string - -0.2.0 / 2012-01-22 -================== - - * Added wildcard support - -0.1.0 / 2011-12-02 -================== - - * Added: remove colors unless stderr isatty [TooTallNate] - -0.0.1 / 2010-01-03 -================== - - * Initial release +Please see https://github.com/visionmedia/debug/releases for all changelogs and information pertaining +to new releases. From 010fd0d92faeed1bd7e822f3780175e4f57fa2db Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 19 Dec 2018 01:43:40 +0100 Subject: [PATCH 081/118] remove changelog --- CHANGELOG.md | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 97162b9e..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,4 +0,0 @@ -CHANGELOG.md has been deprecated moved to the Github releases pages. It will be removed in the future. - -Please see https://github.com/visionmedia/debug/releases for all changelogs and information pertaining -to new releases. From dfd5ffa8b6cd52056651964360749a1873149eff Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 19 Dec 2018 01:46:00 +0100 Subject: [PATCH 082/118] remove bower.json (closes #602) --- bower.json | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 bower.json diff --git a/bower.json b/bower.json deleted file mode 100644 index 027804ce..00000000 --- a/bower.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "visionmedia-debug", - "main": "./src/browser.js", - "homepage": "https://github.com/visionmedia/debug", - "authors": [ - "TJ Holowaychuk ", - "Nathan Rajlich (http://n8.io)", - "Andrew Rhyne " - ], - "description": "visionmedia-debug", - "moduleType": [ - "amd", - "es6", - "globals", - "node" - ], - "keywords": [ - "visionmedia", - "debug" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} From dc5c34f9d8fc9c08ee5b275b4f0c51b9f984a98f Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 19 Dec 2018 02:05:38 +0100 Subject: [PATCH 083/118] remove .eslintrc --- .eslintrc | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 .eslintrc diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 146371ed..00000000 --- a/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "env": { - "browser": true, - "node": true - }, - "globals": { - "chrome": true - }, - "rules": { - "no-console": 0, - "no-empty": [1, { "allowEmptyCatch": true }] - }, - "extends": "eslint:recommended" -} From fe49015965c0f29f943df20f29445b4310b3ce0a Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 19 Dec 2018 02:29:30 +0100 Subject: [PATCH 084/118] remove .coveralls.yml --- .coveralls.yml | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .coveralls.yml diff --git a/.coveralls.yml b/.coveralls.yml deleted file mode 100644 index 20a70685..00000000 --- a/.coveralls.yml +++ /dev/null @@ -1 +0,0 @@ -repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve From ad551e2b61022107cee85a66819cd4d2b962038a Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 19 Dec 2018 02:45:52 +0100 Subject: [PATCH 085/118] add Josh Junon to contributors --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 2e14fcbe..3464bd8a 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "author": "TJ Holowaychuk ", "contributors": [ "Nathan Rajlich (http://n8.io)", - "Andrew Rhyne " + "Andrew Rhyne ", + "Josh Junon " ], "license": "MIT", "scripts": { From 0e94034efb1e88b88a06ca3862d8d2cc2f2ed5d0 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 19 Dec 2018 02:41:45 +0100 Subject: [PATCH 086/118] update development dependencies --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 3464bd8a..9e35a1b2 100644 --- a/package.json +++ b/package.json @@ -44,12 +44,12 @@ "@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", + "browserify": "16.2.3", + "chai": "^4.2.0", + "concurrently": "^4.1.0", "coveralls": "^3.0.2", "istanbul": "^0.4.5", - "karma": "^2.0.0", + "karma": "^3.1.4", "karma-chai": "^0.1.0", "karma-mocha": "^1.3.0", "karma-chrome-launcher": "^2.2.0", From 94583b652a58e58102074ce5ab99e17972db1c4f Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 19 Dec 2018 04:03:39 +0100 Subject: [PATCH 087/118] remove build system (closes #652) --- .babelrc | 13 ------------- .travis.yml | 1 + karma.conf.js | 43 +++++++++++++++++------------------------- package.json | 25 ++++++------------------- test.js | 52 +++++++++++++++++++++------------------------------ 5 files changed, 45 insertions(+), 89 deletions(-) delete mode 100644 .babelrc diff --git a/.babelrc b/.babelrc deleted file mode 100644 index b2799de4..00000000 --- a/.babelrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { - "targets": { - "chrome": "58", - "ie": "8" - } - } - ] - ] -} diff --git a/.travis.yml b/.travis.yml index 24682db3..c020bf98 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ node_js: - "6" - "8" - "10" + - "11" install: - npm install diff --git a/karma.conf.js b/karma.conf.js index 38f34571..6e835858 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,32 +1,16 @@ -// Karma configuration -// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC) - module.exports = function (config) { config.set({ - - // Base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', - // Frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha', 'chai'], + frameworks: ['browserify', 'mocha'], // List of files / patterns to load in the browser files: [ - 'dist/debug.js', - 'dist/test.js' + 'src/browser.js', + 'src/common.js', + 'test.js' ], - // List of files to exclude - exclude: [ - 'src/node.js' - ], - - // Preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - }, - // Test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter @@ -40,10 +24,7 @@ module.exports = function (config) { // Level of logging // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - // Enable / disable watching file and executing tests whenever any file changes - autoWatch: true, + logLevel: config.LOG_DEBUG, // Start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher @@ -55,12 +36,22 @@ module.exports = function (config) { } }, + preprocessors: { + // *Sigh* what a glob, folks! + '{{!(node_modules),*.js},!(node_modules)/**/*.js}': ['browserify'] + }, + + browserify: { + debug: true, + transform: ['brfs'] + }, + // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits - singleRun: false, + singleRun: true, // Concurrency level // how many browser should be started simultaneous - concurrency: Infinity + concurrency: 1 }); }; diff --git a/package.json b/package.json index 9e35a1b2..c26c4a16 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ ], "files": [ "src", - "dist/debug.js", "LICENSE", "README.md" ], @@ -28,37 +27,25 @@ "lint": "xo", "test": "npm run test:node && npm run test:browser", "test:node": "istanbul cover _mocha -- test.js", - "posttest:node": "cat ./coverage/lcov.info | coveralls", - "pretest:browser": "npm run build", "test:browser": "karma start --single-run", - "prebuild:debug": "mkdir -p dist && browserify --standalone debug -o dist/debug.es6.js .", - "build:debug": "babel -o dist/debug.js dist/debug.es6.js > dist/debug.js", - "build:test": "babel -d dist test.js", - "build": "npm run build:debug && npm run build:test", - "clean": "rimraf dist coverage" + "posttest:node": "cat ./coverage/lcov.info | coveralls" }, "dependencies": { "ms": "^2.1.1" }, "devDependencies": { - "@babel/cli": "^7.0.0", - "@babel/core": "^7.0.0", - "@babel/preset-env": "^7.0.0", - "browserify": "16.2.3", - "chai": "^4.2.0", - "concurrently": "^4.1.0", + "brfs": "^2.0.1", + "browserify": "^16.2.3", "coveralls": "^3.0.2", "istanbul": "^0.4.5", "karma": "^3.1.4", - "karma-chai": "^0.1.0", - "karma-mocha": "^1.3.0", + "karma-browserify": "^6.0.0", "karma-chrome-launcher": "^2.2.0", + "karma-mocha": "^1.3.0", "mocha": "^5.2.0", "mocha-lcov-reporter": "^1.2.0", - "rimraf": "^2.5.4", "xo": "^0.23.0" }, "main": "./src/index.js", - "browser": "./src/browser.js", - "unpkg": "./dist/debug.js" + "browser": "./src/browser.js" } diff --git a/test.js b/test.js index 888f9bd8..460f9759 100644 --- a/test.js +++ b/test.js @@ -1,17 +1,7 @@ /* eslint-env mocha */ -'use strict'; -let chai; - -let expect; - -let debug; - -if (typeof module !== 'undefined') { - chai = require('chai'); - expect = chai.expect; - debug = require('./src'); -} +const assert = require('assert'); +const debug = require('./src'); describe('debug', () => { it('passes a basic sanity check', () => { @@ -19,7 +9,7 @@ describe('debug', () => { log.enabled = true; log.log = () => {}; - expect(() => log('hello world')).to.not.throw(); + assert.doesNotThrow(() => log('hello world')); }); it('allows namespaces to be a non-string value', () => { @@ -27,16 +17,16 @@ describe('debug', () => { log.enabled = true; log.log = () => {}; - expect(() => debug.enable(true)).to.not.throw(); + assert.doesNotThrow(() => debug.enable(true)); }); it('honors global debug namespace enable calls', () => { - expect(debug('test:12345').enabled).to.equal(false); - expect(debug('test:67890').enabled).to.equal(false); + assert.deepStrictEqual(debug('test:12345').enabled, false); + assert.deepStrictEqual(debug('test:67890').enabled, false); debug.enable('test:12345'); - expect(debug('test:12345').enabled).to.equal(true); - expect(debug('test:67890').enabled).to.equal(false); + assert.deepStrictEqual(debug('test:12345').enabled, true); + assert.deepStrictEqual(debug('test:67890').enabled, false); }); it('uses custom log function', () => { @@ -50,7 +40,7 @@ describe('debug', () => { log('using custom log function again'); log('%O', 12345); - expect(messages.length).to.equal(3); + assert.deepStrictEqual(messages.length, 3); }); describe('extend namespace', () => { @@ -60,7 +50,7 @@ describe('debug', () => { log.log = () => {}; const logBar = log.extend('bar'); - expect(logBar.namespace).to.be.equal('foo:bar'); + assert.deepStrictEqual(logBar.namespace, 'foo:bar'); }); it('should extend namespace with custom delimiter', () => { @@ -69,7 +59,7 @@ describe('debug', () => { log.log = () => {}; const logBar = log.extend('bar', '--'); - expect(logBar.namespace).to.be.equal('foo--bar'); + assert.deepStrictEqual(logBar.namespace, 'foo--bar'); }); it('should extend namespace with empty delimiter', () => { @@ -78,7 +68,7 @@ describe('debug', () => { log.log = () => {}; const logBar = log.extend('bar', ''); - expect(logBar.namespace).to.be.equal('foobar'); + assert.deepStrictEqual(logBar.namespace, 'foobar'); }); }); @@ -86,27 +76,27 @@ describe('debug', () => { it('handle names, skips, and wildcards', () => { debug.enable('test,abc*,-abc'); const namespaces = debug.disable(); - expect(namespaces).to.equal('test,abc*,-abc'); + assert.deepStrictEqual(namespaces, 'test,abc*,-abc'); }); it('handles empty', () => { debug.enable(''); const namespaces = debug.disable(); - expect(namespaces).to.equal(''); - expect(debug.names).to.deep.equal([]); - expect(debug.skips).to.deep.equal([]); + assert.deepStrictEqual(namespaces, ''); + assert.deepStrictEqual(debug.names, []); + assert.deepStrictEqual(debug.skips, []); }); it('handles all', () => { debug.enable('*'); const namespaces = debug.disable(); - expect(namespaces).to.equal('*'); + assert.deepStrictEqual(namespaces, '*'); }); it('handles skip all', () => { debug.enable('-*'); const namespaces = debug.disable(); - expect(namespaces).to.equal('-*'); + assert.deepStrictEqual(namespaces, '-*'); }); it('names+skips same with new string', () => { @@ -114,10 +104,10 @@ describe('debug', () => { const oldNames = [...debug.names]; const oldSkips = [...debug.skips]; const namespaces = debug.disable(); - expect(namespaces).to.equal('test,abc*,-abc'); + assert.deepStrictEqual(namespaces, 'test,abc*,-abc'); debug.enable(namespaces); - expect(oldNames.map(String)).to.deep.equal(debug.names.map(String)); - expect(oldSkips.map(String)).to.deep.equal(debug.skips.map(String)); + assert.deepStrictEqual(oldNames.map(String), debug.names.map(String)); + assert.deepStrictEqual(oldSkips.map(String), debug.skips.map(String)); }); }); }); From c0127b18a0b7670bf931072a25ddc82e84116659 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 19 Dec 2018 04:26:28 +0100 Subject: [PATCH 088/118] remove examples folder (closes #650) --- examples/browser/colors.html | 28 ---------------------------- examples/node/app.js | 20 -------------------- examples/node/colors.js | 8 -------- examples/node/stdout.js | 18 ------------------ examples/node/wildcards.js | 10 ---------- examples/node/worker.js | 27 --------------------------- 6 files changed, 111 deletions(-) delete mode 100644 examples/browser/colors.html delete mode 100644 examples/node/app.js delete mode 100644 examples/node/colors.js delete mode 100644 examples/node/stdout.js delete mode 100644 examples/node/wildcards.js delete mode 100644 examples/node/worker.js diff --git a/examples/browser/colors.html b/examples/browser/colors.html deleted file mode 100644 index ce969072..00000000 --- a/examples/browser/colors.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - debug() - - - - - - - Open your - Web Inspector - to see the debug output - - diff --git a/examples/node/app.js b/examples/node/app.js deleted file mode 100644 index 08d3f257..00000000 --- a/examples/node/app.js +++ /dev/null @@ -1,20 +0,0 @@ -const http = require('http'); - -const debug = require('../..')('http'); - -const name = 'My App'; - -// Fake app - -debug('booting %o', name); - -http.createServer((req, res) => { - debug(req.method + ' ' + req.url); - res.end('hello\n'); -}).listen(3000, () => { - debug('listening'); -}); - -// Fake worker of some kind -// eslint-disable-next-line import/no-unassigned-import -require('./worker'); diff --git a/examples/node/colors.js b/examples/node/colors.js deleted file mode 100644 index 9cbfa1f9..00000000 --- a/examples/node/colors.js +++ /dev/null @@ -1,8 +0,0 @@ -const debug = require('../..'); - -debug.enable('*'); - -for (let i = 0; i < debug.colors.length; i++) { - const d = debug('example:' + i); - d('The color is %o', d.color); -} diff --git a/examples/node/stdout.js b/examples/node/stdout.js deleted file mode 100644 index 17558da0..00000000 --- a/examples/node/stdout.js +++ /dev/null @@ -1,18 +0,0 @@ -const debug = require('../..'); - -const error = debug('app:error'); - -// By default stderr is used -error('goes to stderr!'); - -const log = debug('app:log'); -// Set this namespace to log via console.log -log.log = console.log.bind(console); // Don't forget to bind to console! -log('goes to stdout'); -error('still goes to stderr!'); - -// Set all output to go via console.info -// overrides all per-namespace log settings -debug.log = console.info.bind(console); -error('now goes to stdout via console.info'); -log('still goes to stdout, but via console.info now'); diff --git a/examples/node/wildcards.js b/examples/node/wildcards.js deleted file mode 100644 index 2cedc2d8..00000000 --- a/examples/node/wildcards.js +++ /dev/null @@ -1,10 +0,0 @@ - -const debug = { - foo: require('../..')('test:foo'), - bar: require('../..')('test:bar'), - baz: require('../..')('test:baz') -}; - -debug.foo('foo'); -debug.bar('bar'); -debug.baz('baz'); diff --git a/examples/node/worker.js b/examples/node/worker.js deleted file mode 100644 index 6f483a66..00000000 --- a/examples/node/worker.js +++ /dev/null @@ -1,27 +0,0 @@ - -// DEBUG=* node example/worker -// DEBUG=worker:* node example/worker -// DEBUG=worker:a node example/worker -// DEBUG=worker:b node example/worker - -const a = require('../..')('worker:a'); - -const b = require('../..')('worker:b'); - -function work() { - a('doing lots of uninteresting work'); - setTimeout(work, Math.random() * 1000); -} - -work(); - -function workb() { - b('doing some work'); - setTimeout(workb, Math.random() * 2000); -} - -workb(); - -setTimeout(() => { - b(new Error('fail')); -}, 5000); From 5528572f9a96b9202e77e565eb641ba8c74aec40 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 19 Dec 2018 04:41:05 +0100 Subject: [PATCH 089/118] use console.debug() in browser when available (closes #600) also removes a branch for each logging call, slightly improving performance in the browser. --- src/browser.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/browser.js b/src/browser.js index 5f34c0d0..ac3f7e13 100644 --- a/src/browser.js +++ b/src/browser.js @@ -4,7 +4,6 @@ * This is the web browser implementation of `debug()`. */ -exports.log = log; exports.formatArgs = formatArgs; exports.save = save; exports.load = load; @@ -170,18 +169,14 @@ function formatArgs(args) { } /** - * Invokes `console.log()` when available. - * No-op when `console.log` is not a "function". + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. * * @api public */ -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); -} +exports.log = console.debug || console.log || (() => {}); /** * Save `namespaces`. From 825d35a2da0a9fa115baffea2f07d22b876332fc Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 19 Dec 2018 04:56:06 +0100 Subject: [PATCH 090/118] copy custom logger to namespace extension (fixes #646) --- src/common.js | 4 +++- test.js | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/common.js b/src/common.js index 0b6d0b64..2f82b8dc 100644 --- a/src/common.js +++ b/src/common.js @@ -143,7 +143,9 @@ function setup(env) { } function extend(namespace, delimiter) { - return createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; } /** diff --git a/test.js b/test.js index 460f9759..f61e079b 100644 --- a/test.js +++ b/test.js @@ -70,6 +70,14 @@ describe('debug', () => { const logBar = log.extend('bar', ''); assert.deepStrictEqual(logBar.namespace, 'foobar'); }); + + it('should keep the log function between extensions', () => { + const log = debug('foo'); + log.log = () => {}; + + const logBar = log.extend('bar'); + assert.deepStrictEqual(log.log, logBar.log); + }); }); describe('rebuild namespaces string (disable)', () => { From 982c12c926699221c6769b50a8ead9d50f8807c4 Mon Sep 17 00:00:00 2001 From: Myles Borins Date: Sat, 22 Dec 2018 03:14:57 -0500 Subject: [PATCH 091/118] test: only run coveralls on travis s/posttest:node/coverage Explicitly call coverage only from CI. This will stop the test suite from failing on a system not configured to authenticate with circle-ci --- .travis.yml | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c020bf98..40103cfc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,3 +14,4 @@ install: script: - npm run lint - npm test + - npm run test:coverage diff --git a/package.json b/package.json index c26c4a16..643af019 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "test": "npm run test:node && npm run test:browser", "test:node": "istanbul cover _mocha -- test.js", "test:browser": "karma start --single-run", - "posttest:node": "cat ./coverage/lcov.info | coveralls" + "test:coverage": "cat ./coverage/lcov.info | coveralls" }, "dependencies": { "ms": "^2.1.1" From 976f8d2afc5e2a815225ff6eca2e02f4ef0462ee Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Thu, 10 Jan 2019 16:51:53 +0100 Subject: [PATCH 092/118] add issue and pull request templates --- .github/ISSUE_TEMPLATE.md | 17 +++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..baaeb283 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,17 @@ + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..c43a8c82 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ + From 5c7c61dc0df0db4eb5de25707d8cd1b9be1add4f Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Thu, 10 Jan 2019 16:53:31 +0100 Subject: [PATCH 093/118] fix links in issue templates --- .github/ISSUE_TEMPLATE.md | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index baaeb283..3c5c9a92 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -12,6 +12,6 @@ target the browsers that make sense for your project. For more information, please see: -https://github.com/visionmedia/debug/pull/672 +https://github.com/sindresorhus/ama/issues/446#issuecomment-281014491 --> diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c43a8c82..af3da470 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -12,6 +12,6 @@ target the browsers that make sense for your project. For more information, please see: -https://github.com/visionmedia/debug/pull/672 +https://github.com/sindresorhus/ama/issues/446#issuecomment-281014491 --> From 608fca962b34e2bda841db9a4416bab6b4a62803 Mon Sep 17 00:00:00 2001 From: Qix Date: Wed, 13 Nov 2019 11:27:24 +0100 Subject: [PATCH 094/118] Update ISSUE_TEMPLATE.md --- .github/ISSUE_TEMPLATE.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 3c5c9a92..58858535 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -14,4 +14,15 @@ your project. For more information, please see: https://github.com/sindresorhus/ama/issues/446#issuecomment-281014491 +Please keep in mind that `debug` is downloaded, +installed, transpiled and used millions of times +*per day*. If you have an error with `debug`, it's +most likely your own configuration (e.g. with Babel, +Webpack, etc). + +Unless you post ample evidence you have tried +to fix this yourself, it will most likely +be determined that your issue is localized +to your project - not `debug`. + --> From 3f4d7247c0f57085c3d8450593b22ecd7ef73886 Mon Sep 17 00:00:00 2001 From: Valeri Karpov Date: Tue, 7 Jan 2020 20:38:20 -0500 Subject: [PATCH 095/118] Add "engines" to `package.json` (#680) --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 643af019..5e9d45e2 100644 --- a/package.json +++ b/package.json @@ -47,5 +47,8 @@ "xo": "^0.23.0" }, "main": "./src/index.js", - "browser": "./src/browser.js" + "browser": "./src/browser.js", + "engines": { + "node": ">=6.0" + } } From 4acdeedd4b532f0b5a86b35019e0bc9f081d04b4 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Sun, 12 Jan 2020 20:29:28 +0100 Subject: [PATCH 096/118] run linter inside of test script --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5e9d45e2..85b6f1d6 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "license": "MIT", "scripts": { "lint": "xo", - "test": "npm run test:node && npm run test:browser", + "test": "npm run test:node && npm run test:browser && npm run lint", "test:node": "istanbul cover _mocha -- test.js", "test:browser": "karma start --single-run", "test:coverage": "cat ./coverage/lcov.info | coveralls" @@ -49,6 +49,6 @@ "main": "./src/index.js", "browser": "./src/browser.js", "engines": { - "node": ">=6.0" + "node": ">=6.0" } } From 0c1d5180ff9559b506c8b431b24842bed0e8a5e2 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Sun, 12 Jan 2020 20:31:27 +0100 Subject: [PATCH 097/118] remove dead code and fix lowercase comment (for linter) --- src/common.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/common.js b/src/common.js index 2f82b8dc..32b4fd62 100644 --- a/src/common.js +++ b/src/common.js @@ -120,10 +120,8 @@ function setup(env) { debug.color = selectColor(namespace); debug.destroy = destroy; debug.extend = extend; - // Debug.formatArgs = formatArgs; - // debug.rawLog = rawLog; - // env-specific initialization logic for debug instances + // Env-specific initialization logic for debug instances if (typeof createDebug.init === 'function') { createDebug.init(debug); } From 6b07f9e50a528b6b47256d876f7e77374c337333 Mon Sep 17 00:00:00 2001 From: Milan Skuhra Date: Sun, 23 Feb 2020 20:07:49 +0100 Subject: [PATCH 098/118] Fixes: Unable to take control over selectColor #747 --- src/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.js b/src/common.js index 32b4fd62..da7eada6 100644 --- a/src/common.js +++ b/src/common.js @@ -117,7 +117,7 @@ function setup(env) { debug.namespace = namespace; debug.enabled = createDebug.enabled(namespace); debug.useColors = createDebug.useColors(); - debug.color = selectColor(namespace); + debug.color = createDebug.selectColor(namespace); debug.destroy = destroy; debug.extend = extend; From db306db99e7822d355724698990d335927563210 Mon Sep 17 00:00:00 2001 From: Douglas Wilson Date: Fri, 27 Mar 2020 12:28:00 -0400 Subject: [PATCH 099/118] Update and pin ms to 2.1.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 85b6f1d6..b20770f2 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "test:coverage": "cat ./coverage/lcov.info | coveralls" }, "dependencies": { - "ms": "^2.1.1" + "ms": "2.1.2" }, "devDependencies": { "brfs": "^2.0.1", From 09914af00e4c1479db9aa160bc51cb8c7e063ca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Nison?= Date: Wed, 16 Oct 2019 16:55:00 +0200 Subject: [PATCH 100/118] Marks supports-color as an *optional* peer dependency --- package.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/package.json b/package.json index b20770f2..f9dd28e7 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,11 @@ "mocha-lcov-reporter": "^1.2.0", "xo": "^0.23.0" }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + }, "main": "./src/index.js", "browser": "./src/browser.js", "engines": { From 80ef62a3af4df95250d77d64edfc3d0e1667e7e8 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Tue, 19 May 2020 11:36:58 +0200 Subject: [PATCH 101/118] 4.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f9dd28e7..c270ca0e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "4.1.0", + "version": "4.2.0", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From 22e13fe07e21f32888201aa40833599fd10a4fbb Mon Sep 17 00:00:00 2001 From: "Bruce A. MacNaughton" Date: Mon, 6 Apr 2020 13:37:14 -0700 Subject: [PATCH 102/118] fix quoted percent sign --- src/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.js b/src/common.js index da7eada6..a7eeb0b1 100644 --- a/src/common.js +++ b/src/common.js @@ -92,7 +92,7 @@ function setup(env) { args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { // If we encounter an escaped % then don't increase the array index if (match === '%%') { - return match; + return '%'; } index++; const formatter = createDebug.formatters[format]; From 27152cad248df54217a14c072e7be1cd16da5f6d Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Sun, 12 Jan 2020 20:10:16 +0100 Subject: [PATCH 103/118] add test for enable/disable of existing instances --- test.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test.js b/test.js index f61e079b..a1d6f633 100644 --- a/test.js +++ b/test.js @@ -117,5 +117,24 @@ describe('debug', () => { assert.deepStrictEqual(oldNames.map(String), debug.names.map(String)); assert.deepStrictEqual(oldSkips.map(String), debug.skips.map(String)); }); + + it('handles re-enabling existing instances', () => { + debug.disable('*'); + const inst = debug('foo'); + const messages = []; + inst.log = msg => messages.push(msg.replace(/^[^@]*@([^@]+)@.*$/, '$1')); + + inst('@test@'); + assert.deepStrictEqual(messages, []); + debug.enable('foo'); + assert.deepStrictEqual(messages, []); + inst('@test2@'); + assert.deepStrictEqual(messages, ['test2']); + inst('@test3@'); + assert.deepStrictEqual(messages, ['test2', 'test3']); + debug.disable('*'); + inst('@test4@'); + assert.deepStrictEqual(messages, ['test2', 'test3']); + }); }); }); From 72e7f864bd75fc8353e4dd450de96d9104ba9f35 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Sun, 12 Jan 2020 20:14:48 +0100 Subject: [PATCH 104/118] fix memory leak within debug instance --- src/common.js | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/src/common.js b/src/common.js index a7eeb0b1..9d7e4dce 100644 --- a/src/common.js +++ b/src/common.js @@ -17,11 +17,6 @@ function setup(env) { createDebug[key] = env[key]; }); - /** - * Active `debug` instances. - */ - createDebug.instances = []; - /** * The currently active debug mode names, and names to skip. */ @@ -63,6 +58,7 @@ function setup(env) { */ function createDebug(namespace) { let prevTime; + let enableOverride = null; function debug(...args) { // Disabled? @@ -115,31 +111,27 @@ function setup(env) { } debug.namespace = namespace; - debug.enabled = createDebug.enabled(namespace); debug.useColors = createDebug.useColors(); debug.color = createDebug.selectColor(namespace); - debug.destroy = destroy; debug.extend = extend; + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => enableOverride === null ? createDebug.enabled(namespace) : enableOverride, + set: v => { + enableOverride = v; + } + }); + // Env-specific initialization logic for debug instances if (typeof createDebug.init === 'function') { createDebug.init(debug); } - createDebug.instances.push(debug); - return debug; } - function destroy() { - const index = createDebug.instances.indexOf(this); - if (index !== -1) { - createDebug.instances.splice(index, 1); - return true; - } - return false; - } - function extend(namespace, delimiter) { const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); newDebug.log = this.log; @@ -177,11 +169,6 @@ function setup(env) { createDebug.names.push(new RegExp('^' + namespaces + '$')); } } - - for (i = 0; i < createDebug.instances.length; i++) { - const instance = createDebug.instances[i]; - instance.enabled = createDebug.enabled(instance.namespace); - } } /** From e2d3bc9e428bdd45adb8d6e7f8ab543bee54d9a6 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Sun, 12 Jan 2020 20:25:37 +0100 Subject: [PATCH 105/118] add deprecation notice for debug.destroy() --- src/browser.js | 10 ++++++++++ src/common.js | 10 ++++++++++ src/node.js | 4 ++++ 3 files changed, 24 insertions(+) diff --git a/src/browser.js b/src/browser.js index ac3f7e13..cd0fc35d 100644 --- a/src/browser.js +++ b/src/browser.js @@ -9,6 +9,16 @@ exports.save = save; exports.load = load; exports.useColors = useColors; exports.storage = localstorage(); +exports.destroy = (() => { + let warned = false; + + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; +})(); /** * Colors. diff --git a/src/common.js b/src/common.js index 9d7e4dce..392a8e00 100644 --- a/src/common.js +++ b/src/common.js @@ -12,6 +12,7 @@ function setup(env) { createDebug.enable = enable; createDebug.enabled = enabled; createDebug.humanize = require('ms'); + createDebug.destroy = destroy; Object.keys(env).forEach(key => { createDebug[key] = env[key]; @@ -114,6 +115,7 @@ function setup(env) { debug.useColors = createDebug.useColors(); debug.color = createDebug.selectColor(namespace); debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. Object.defineProperty(debug, 'enabled', { enumerable: true, @@ -243,6 +245,14 @@ function setup(env) { return val; } + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + createDebug.enable(createDebug.load()); return createDebug; diff --git a/src/node.js b/src/node.js index 5e1f1541..12a11f40 100644 --- a/src/node.js +++ b/src/node.js @@ -15,6 +15,10 @@ 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`.' +); /** * Colors. From 3f56313c1e4a0d59c1054fb9b10026b6903bfba7 Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Sat, 19 Sep 2020 10:35:28 +0200 Subject: [PATCH 106/118] 4.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c270ca0e..c4e19aa1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "4.2.0", + "version": "4.3.0", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From b6d12fdbc63b483e5c969da33ea6adc09946b5ac Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Thu, 19 Nov 2020 12:31:16 +0100 Subject: [PATCH 107/118] fix regression --- src/node.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/node.js b/src/node.js index 12a11f40..79bc085c 100644 --- a/src/node.js +++ b/src/node.js @@ -248,7 +248,9 @@ const {formatters} = module.exports; formatters.o = function (v) { this.inspectOpts.colors = this.useColors; return util.inspect(v, this.inspectOpts) - .replace(/\s*\n\s*/g, ' '); + .split('\n') + .map(str => str.trim()) + .join(' '); }; /** From 0d3d66b0eb47c5d34e1a940e8a204446fdd832cd Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Thu, 19 Nov 2020 13:15:13 +0100 Subject: [PATCH 108/118] 4.3.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c4e19aa1..da809d2b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "4.3.0", + "version": "4.3.1", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From 1e9d38c2e6e170abde6cfeaf7b2024d8b456f906 Mon Sep 17 00:00:00 2001 From: omg Date: Wed, 9 Dec 2020 17:34:56 +0200 Subject: [PATCH 109/118] cache enabled status per-logger (#799) Co-authored-by: Qix --- src/common.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/common.js b/src/common.js index 392a8e00..50ce2925 100644 --- a/src/common.js +++ b/src/common.js @@ -60,6 +60,8 @@ function setup(env) { function createDebug(namespace) { let prevTime; let enableOverride = null; + let namespacesCache; + let enabledCache; function debug(...args) { // Disabled? @@ -120,7 +122,17 @@ function setup(env) { Object.defineProperty(debug, 'enabled', { enumerable: true, configurable: false, - get: () => enableOverride === null ? createDebug.enabled(namespace) : enableOverride, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, set: v => { enableOverride = v; } @@ -149,6 +161,7 @@ function setup(env) { */ function enable(namespaces) { createDebug.save(namespaces); + createDebug.namespaces = namespaces; createDebug.names = []; createDebug.skips = []; From e47f96de3de5921584364b4ac91e2769d22a3b1f Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Wed, 9 Dec 2020 16:35:38 +0100 Subject: [PATCH 110/118] 4.3.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index da809d2b..b7d70acb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git://github.com/visionmedia/debug.git" From d177f2bc36d3b8b8e9b1b006727ef5e04f98eac7 Mon Sep 17 00:00:00 2001 From: Taylor Everding Date: Fri, 21 May 2021 13:51:30 -0600 Subject: [PATCH 111/118] Remove accidental epizeuxis --- src/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.js b/src/common.js index 50ce2925..6d571d28 100644 --- a/src/common.js +++ b/src/common.js @@ -34,7 +34,7 @@ function setup(env) { /** * Selects a color for a debug namespace - * @param {String} namespace The namespace string for the for the debug instance to be colored + * @param {String} namespace The namespace string for the debug instance to be colored * @return {Number|String} An ANSI color code for the given namespace * @api private */ From f851b00eb006d400e757dca33568773910365519 Mon Sep 17 00:00:00 2001 From: Kristof Kalocsai Date: Wed, 13 Oct 2021 21:14:14 +0200 Subject: [PATCH 112/118] adds README section regarding usage in child procs (#850) * adds README section regarding usage in child procs code example and original request copied from @aaarichter should close #811 * Update README.md Co-authored-by: Qix Co-authored-by: Qix --- README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.md b/README.md index 88dae35d..3b168838 100644 --- a/README.md +++ b/README.md @@ -351,6 +351,27 @@ if (debug.enabled) { You can also manually toggle this property to force the debug instance to be enabled or disabled. +## Usage in child processes + +Due to the way `debug` detects if the output is a TTY or not, colors are not shown in child processes when `stderr` is piped. A solution is to pass the `DEBUG_COLORS=1` environment variable to the child process. +For example: + +```javascript +worker = fork(WORKER_WRAP_PATH, [workerPath], { + stdio: [ + /* stdin: */ 0, + /* stdout: */ 'pipe', + /* stderr: */ 'pipe', + 'ipc', + ], + env: Object.assign({}, process.env, { + DEBUG_COLORS: 1 // without this settings, colors won't be shown + }), +}); + +worker.stderr.pipe(process.stderr, { end: false }); +``` + ## Authors From 19b36c052ab0084f8b1c86d34d3e82190680246a Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Sat, 27 Nov 2021 14:00:16 +0100 Subject: [PATCH 113/118] update repository location + maintainership information --- README.md | 2 +- package.json | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3b168838..3457f655 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # debug -[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![Build Status](https://travis-ci.org/debug-js/debug.svg?branch=master)](https://travis-ci.org/debug-js/debug) [![Coverage Status](https://coveralls.io/repos/github/debug-js/debug/badge.svg?branch=master)](https://coveralls.io/github/debug-js/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) [![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) diff --git a/package.json b/package.json index b7d70acb..9cd2a2d7 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "version": "4.3.2", "repository": { "type": "git", - "url": "git://github.com/visionmedia/debug.git" + "url": "git://github.com/debug-js/debug.git" }, - "description": "small debugging utility", + "description": "Lightweight debugging utility for Node.js and the browser", "keywords": [ "debug", "log", @@ -16,11 +16,11 @@ "LICENSE", "README.md" ], - "author": "TJ Holowaychuk ", + "author": "Josh Junon ", "contributors": [ + "TJ Holowaychuk ", "Nathan Rajlich (http://n8.io)", - "Andrew Rhyne ", - "Josh Junon " + "Andrew Rhyne " ], "license": "MIT", "scripts": { From 4079aae5b5bf1198ecd2e1032609dfd46bec843f Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Sat, 27 Nov 2021 14:01:16 +0100 Subject: [PATCH 114/118] update license and more maintainership information --- LICENSE | 19 ++++++++++--------- README.md | 2 ++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/LICENSE b/LICENSE index 658c933d..1a9820e2 100644 --- a/LICENSE +++ b/LICENSE @@ -1,19 +1,20 @@ (The MIT License) -Copyright (c) 2014 TJ Holowaychuk +Copyright (c) 2014-2017 TJ Holowaychuk +Copyright (c) 2018-2021 Josh Junon -Permission is hereby granted, free of charge, to any person obtaining a copy of this software -and associated documentation files (the 'Software'), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 3457f655..5ea4cd27 100644 --- a/README.md +++ b/README.md @@ -378,6 +378,7 @@ worker.stderr.pipe(process.stderr, { end: false }); - TJ Holowaychuk - Nathan Rajlich - Andrew Rhyne + - Josh Junon ## Backers @@ -455,6 +456,7 @@ Become a sponsor and get your logo on our README on Github with a link to your s (The MIT License) Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> +Copyright (c) 2018-2021 Josh Junon Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the From 043d3cd17d30af45f71d2beab4ec7abfc9936e9e Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Sat, 27 Nov 2021 14:01:35 +0100 Subject: [PATCH 115/118] 4.3.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9cd2a2d7..cb7efa8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "4.3.2", + "version": "4.3.3", "repository": { "type": "git", "url": "git://github.com/debug-js/debug.git" From c0805cc4d3b2c7c987567e99ecaec78840516d7b Mon Sep 17 00:00:00 2001 From: gitname Date: Wed, 2 Feb 2022 16:34:39 -0800 Subject: [PATCH 116/118] add section about configuring JS console to show debug messages (#866) * Add section about configuring JS console to show debug messages * Rewrite log level section to be more concise --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 5ea4cd27..e9c3e047 100644 --- a/README.md +++ b/README.md @@ -241,6 +241,9 @@ setInterval(function(){ }, 1200); ``` +In Chromium-based web browsers (e.g. Brave, Chrome, and Electron), the JavaScript console will—by default—only show messages logged by `debug` if the "Verbose" log level is _enabled_. + + ## Output streams From 9b334123f1331a252bc27c99c33b5c4f199d200f Mon Sep 17 00:00:00 2001 From: CommanderRoot Date: Thu, 17 Mar 2022 14:36:24 +0100 Subject: [PATCH 117/118] replace deprecated String.prototype.substr() (#876) String.prototype.substr() is deprecated (see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr) so we replace it with slice() which works similarily but isn't deprecated. Signed-off-by: Tobias Speicher --- src/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.js b/src/common.js index 6d571d28..e3291b20 100644 --- a/src/common.js +++ b/src/common.js @@ -179,7 +179,7 @@ function setup(env) { namespaces = split[i].replace(/\*/g, '.*?'); if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); } else { createDebug.names.push(new RegExp('^' + namespaces + '$')); } From da66c86c5fd71ef570f36b5b1edfa4472149f1bc Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Thu, 17 Mar 2022 14:38:08 +0100 Subject: [PATCH 118/118] 4.3.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cb7efa8e..3bcdc242 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debug", - "version": "4.3.3", + "version": "4.3.4", "repository": { "type": "git", "url": "git://github.com/debug-js/debug.git"