[Pkg-javascript-commits] [node-debug] 01/03: New upstream version 3.1.0
Paolo Greppi
paolog-guest at moszumanska.debian.org
Fri Nov 3 08:32:19 UTC 2017
This is an automated email from the git hooks/post-receive script.
paolog-guest pushed a commit to branch master
in repository node-debug.
commit f6d7aec7e1b1f3f9e52ef263d433b161bb0ea41b
Author: Paolo Greppi <paolo.greppi at libpf.com>
Date: Fri Nov 3 09:15:58 2017 +0100
New upstream version 3.1.0
---
.eslintrc | 3 +
.gitignore | 5 +-
.travis.yml | 14 ++-
CHANGELOG.md | 52 +++++++++-
Makefile | 44 +++++----
README.md | 182 +++++++++++++++++++++++------------
component.json | 19 ----
example/browser.html | 26 -----
example/wildcards.js | 10 --
examples/browser/colors.html | 28 ++++++
{example => examples/node}/app.js | 6 +-
examples/node/colors.js | 8 ++
{example => examples/node}/stdout.js | 2 +-
examples/node/wildcards.js | 10 ++
{example => examples/node}/worker.js | 4 +-
package.json | 14 +--
src/browser.js | 32 +++---
src/debug.js | 37 +++++--
src/index.js | 2 +-
src/node.js | 135 ++++++++------------------
20 files changed, 361 insertions(+), 272 deletions(-)
diff --git a/.eslintrc b/.eslintrc
index 8a37ae2..146371e 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 }]
diff --git a/.gitignore b/.gitignore
index f459ae9..f0cf3a3 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/.travis.yml b/.travis.yml
index 6c6090c..a764300 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,14 +1,20 @@
+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/CHANGELOG.md b/CHANGELOG.md
index 3eaa74b..820d21e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,54 @@
+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
==================
@@ -10,7 +60,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)
diff --git a/Makefile b/Makefile
index 584da8b..3ddd136 100644
--- a/Makefile
+++ b/Makefile
@@ -15,36 +15,44 @@ 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 browser.js debug.js index.js node.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
- karma start --single-run
- rimraf dist
+lint:
+ @eslint *.js src/*.js
+
+test-node:
+ @istanbul cover node_modules/mocha/bin/_mocha -- test/**.js
+ @cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
-test: .FORCE
- concurrently \
+test-browser:
+ @$(MAKE) browser
+ @karma start --single-run
+
+test-all:
+ @concurrently \
"make test-node" \
"make test-browser"
-coveralls:
- cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
+test:
+ @if [ "x$(BROWSER)" = "x" ]; then \
+ $(MAKE) test-node; \
+ else \
+ $(MAKE) test-browser; \
+ fi
+
+clean:
+ rimraf dist coverage
-.PHONY: all install clean distclean
+.PHONY: browser install clean lint test test-all test-node test-browser
diff --git a/README.md b/README.md
index 4aeab13..8e754d1 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,11 @@
# 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)
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091486-fa38524c-7c37-11e7-895f-e7ec8e1039b6.png">
-
-A tiny node.js debugging utility modelled after node core's debugging technique.
-
-**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)**
+A tiny JavaScript debugging utility modelled after Node.js core's debugging
+technique. Works in Node.js and web browsers.
## Installation
@@ -18,7 +17,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')
@@ -27,7 +26,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);
@@ -41,81 +40,128 @@ 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 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)
+<img width="647" alt="screen shot 2017-08-08 at 12 53 04 pm" src="https://user-images.githubusercontent.com/71256/29091703-a6302cdc-7c38-11e7-8304-7c0b3bc600cd.png">
+<img width="647" alt="screen shot 2017-08-08 at 12 53 38 pm" src="https://user-images.githubusercontent.com/71256/29091700-a62a6888-7c38-11e7-800b-db911291ca2b.png">
+<img width="647" alt="screen shot 2017-08-08 at 12 53 25 pm" src="https://user-images.githubusercontent.com/71256/29091701-a62ea114-7c38-11e7-826a-2692bedca740.png">
#### 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.
+
+## 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.
+
+<img width="521" src="https://user-images.githubusercontent.com/71256/29092181-47f6a9e6-7c3a-11e7-9a14-1928d8a711cd.png">
+
+#### 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).
+
+<img width="524" src="https://user-images.githubusercontent.com/71256/29092033-b65f9f2e-7c39-11e7-8e32-f6f0d8e865c1.png">
+
+
## 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.
+
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091486-fa38524c-7c37-11e7-895f-e7ec8e1039b6.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#toUTCString()` is used, making it more useful for logging the debug information as shown below:
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091956-6bd78372-7c39-11e7-8c55-c948396d6edd.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'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 varia [...]
## 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 |
|-----------|-------------------------------------------------|
-| `DEBUG` | Enables/disabled specific debugging namespaces. |
+| `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. |
- __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 +172,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 +191,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:*'
@@ -170,23 +221,12 @@ 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 something like:
-
- ![](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');
@@ -208,13 +248,29 @@ 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
+
+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) {
+ // do stuff...
+}
+```
+
+You can also manually toggle this property to force the debug instance to be
+enabled or disabled.
+
## Authors
- 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)]
@@ -290,7 +346,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 at vision-media.ca>
+Copyright (c) 2014-2017 TJ Holowaychuk <tj at vision-media.ca>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
diff --git a/component.json b/component.json
deleted file mode 100644
index 2ca5172..0000000
--- a/component.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "name": "debug",
- "repo": "visionmedia/debug",
- "description": "small debugging utility",
- "version": "2.6.5",
- "keywords": [
- "debug",
- "log",
- "debugger"
- ],
- "main": "src/browser.js",
- "scripts": [
- "src/browser.js",
- "src/debug.js"
- ],
- "dependencies": {
- "rauchg/ms.js": "0.7.1"
- }
-}
diff --git a/example/browser.html b/example/browser.html
deleted file mode 100644
index 0090418..0000000
--- a/example/browser.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <title>debug()</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <script src="../dist/debug.js"></script>
- <script>
- // type debug.enable('*') in
- // the console and refresh :)
-
- var a = debug('worker:a');
- var b = debug('worker:b');
-
- setInterval(function(){
- a('doing some work');
- }, 1000);
-
- setInterval(function(){
- b('doing some work');
- }, 1200);
- </script>
- </head>
- <body>
-
- </body>
-</html>
diff --git a/example/wildcards.js b/example/wildcards.js
deleted file mode 100644
index 1fdac20..0000000
--- 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 0000000..ce96907
--- /dev/null
+++ b/examples/browser/colors.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>debug()</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <script src="../../dist/debug.js"></script>
+ <script>
+ debug.enable('*')
+
+ for (var i=0; i < debug.colors.length; i++) {
+ const d = debug('example:' + i);
+ d('The color is %o', d.color);
+ }
+ </script>
+ <style type="text/css">
+ body {
+ padding-top: 100px;
+ text-align: center;
+ font-family: sans-serif;
+ }
+ </style>
+ </head>
+ <body>
+ Open your
+ <strong>Web Inspector</strong>
+ to see the <code>debug</code> output
+ </body>
+</html>
diff --git a/example/app.js b/examples/node/app.js
similarity index 74%
rename from example/app.js
rename to examples/node/app.js
index 05374d9..d4a1991 100644
--- a/example/app.js
+++ b/examples/node/app.js
@@ -1,11 +1,11 @@
-var debug = require('../')('http')
+var debug = require('../../')('http')
, http = require('http')
, name = 'My App';
// fake app
-debug('booting %s', name);
+debug('booting %o', name);
http.createServer(function(req, res){
debug(req.method + ' ' + req.url);
@@ -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 0000000..c144ee4
--- /dev/null
+++ b/examples/node/colors.js
@@ -0,0 +1,8 @@
+var debug = require('../../')
+
+debug.enable('*')
+
+for (var i=0; i < debug.colors.length; i++) {
+ const d = debug('example:' + i);
+ d('The color is %o', d.color);
+}
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 e15322d..c999c4c 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 0000000..ca99aef
--- /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 22225f6..07e3bc5 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');
diff --git a/package.json b/package.json
index 288e632..ada43cf 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "debug",
- "version": "2.6.5",
+ "version": "3.1.0",
"repository": {
"type": "git",
"url": "git://github.com/visionmedia/debug.git"
@@ -18,10 +18,10 @@
],
"license": "MIT",
"dependencies": {
- "ms": "0.7.3"
+ "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",
@@ -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"
}
diff --git a/src/browser.js b/src/browser.js
index 7978ce7..f5149ff 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'
];
/**
@@ -40,20 +45,25 @@ 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 (window && window.process && window.process.type === 'renderer') {
+ if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
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 (document && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+ return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
// is firebug? http://stackoverflow.com/a/398120/376773
- (window && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+ (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
- (navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+ (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
- (navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}
/**
diff --git a/src/debug.js b/src/debug.js
index 6a5e3fc..77e6384 100644
--- a/src/debug.js
+++ b/src/debug.js
@@ -14,6 +14,11 @@ exports.enabled = enabled;
exports.humanize = require('ms');
/**
+ * Active `debug` instances.
+ */
+exports.instances = [];
+
+/**
* The currently active debug mode names, and names to skip.
*/
@@ -29,12 +34,6 @@ exports.skips = [];
exports.formatters = {};
/**
- * Previous log timestamp.
- */
-
-var prevTime;
-
-/**
* Select a color.
* @param {String} namespace
* @return {Number}
@@ -62,6 +61,8 @@ function selectColor(namespace) {
function createDebug(namespace) {
+ var prevTime;
+
function debug() {
// disabled?
if (!debug.enabled) return;
@@ -118,15 +119,28 @@ 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 () {
+ 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.
@@ -141,10 +155,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] === '-') {
@@ -153,6 +168,11 @@ function enable(namespaces) {
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);
+ }
}
/**
@@ -174,6 +194,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)) {
diff --git a/src/index.js b/src/index.js
index e12cf4d..cabcbcd 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');
diff --git a/src/node.js b/src/node.js
index 3c7407b..d666fb9 100644
--- a/src/node.js
+++ b/src/node.js
@@ -23,7 +23,22 @@ 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, 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.
+}
/**
* Build up the default `inspectOpts` object from the environment variables.
@@ -52,30 +67,13 @@ exports.inspectOpts = Object.keys(process.env).filter(function (key) {
}, {});
/**
- * 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`.
*/
function useColors() {
return 'colors' in exports.inspectOpts
? Boolean(exports.inspectOpts.colors)
- : tty.isatty(fd);
+ : tty.isatty(process.stderr.fd);
}
/**
@@ -85,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(' ');
};
/**
@@ -109,22 +109,30 @@ 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] = getDate() + name + ' ' + args[0];
+ }
+}
+
+function getDate() {
+ if (exports.inspectOpts.hideDate) {
+ return '';
} else {
- args[0] = new Date().toUTCString()
- + ' ' + name + ' ' + args[0];
+ return new Date().toISOString() + ' ';
}
}
/**
- * 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');
}
/**
@@ -156,74 +164,6 @@ function load() {
}
/**
- * 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.
*
* Create a new `inspectOpts` object in case `useColors` is set
@@ -231,7 +171,12 @@ function createWritableStdioStream (fd) {
*/
function init (debug) {
- debug.inspectOpts = util._extend({}, exports.inspectOpts);
+ debug.inspectOpts = {};
+
+ var keys = Object.keys(exports.inspectOpts);
+ for (var i = 0; i < keys.length; i++) {
+ debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+ }
}
/**
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-debug.git
More information about the Pkg-javascript-commits
mailing list