Skip to content

Commit

Permalink
Remove DEBUG_FD (#406)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
TooTallNate authored and thebigredgeek committed Apr 12, 2017
1 parent 2f3ebf4 commit c9ff8e7
Showing 1 changed file with 3 additions and 88 deletions.
91 changes: 3 additions & 88 deletions src/node.js
Expand Up @@ -51,31 +51,14 @@ 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`.
*/

function useColors() {
return 'colors' in exports.inspectOpts
? Boolean(exports.inspectOpts.colors)
: tty.isatty(fd);
: tty.isatty(process.stderr.fd);
}

/**
Expand Down Expand Up @@ -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');
}

/**
Expand Down Expand Up @@ -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.
*
Expand Down

0 comments on commit c9ff8e7

Please sign in to comment.