/compass/005_compass/compass/node_modules/debug/node.js |
@@ -0,0 +1,209 @@ |
|
/** |
* Module dependencies. |
*/ |
|
var tty = require('tty'); |
var util = require('util'); |
|
/** |
* This is the Node.js implementation of `debug()`. |
* |
* Expose `debug()` as the module. |
*/ |
|
exports = module.exports = require('./debug'); |
exports.log = log; |
exports.formatArgs = formatArgs; |
exports.save = save; |
exports.load = load; |
exports.useColors = useColors; |
|
/** |
* Colors. |
*/ |
|
exports.colors = [6, 2, 3, 4, 5, 1]; |
|
/** |
* 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; |
var stream = 1 === fd ? process.stdout : |
2 === fd ? process.stderr : |
createWritableStdioStream(fd); |
|
/** |
* Is stdout a TTY? Colored output is enabled when `true`. |
*/ |
|
function useColors() { |
var debugColors = (process.env.DEBUG_COLORS || '').trim().toLowerCase(); |
if (0 === debugColors.length) { |
return tty.isatty(fd); |
} else { |
return '0' !== debugColors |
&& 'no' !== debugColors |
&& 'false' !== debugColors |
&& 'disabled' !== debugColors; |
} |
} |
|
/** |
* Map %o to `util.inspect()`, since Node doesn't do that out of the box. |
*/ |
|
var inspect = (4 === util.inspect.length ? |
// node <= 0.8.x |
function (v, colors) { |
return util.inspect(v, void 0, void 0, colors); |
} : |
// node > 0.8.x |
function (v, colors) { |
return util.inspect(v, { colors: colors }); |
} |
); |
|
exports.formatters.o = function(v) { |
return inspect(v, this.useColors) |
.replace(/\s*\n\s*/g, ' '); |
}; |
|
/** |
* Adds ANSI color escape codes if enabled. |
* |
* @api public |
*/ |
|
function formatArgs() { |
var args = arguments; |
var useColors = this.useColors; |
var name = this.namespace; |
|
if (useColors) { |
var c = this.color; |
|
args[0] = ' \u001b[3' + c + ';1m' + name + ' ' |
+ '\u001b[0m' |
+ args[0] + '\u001b[3' + c + 'm' |
+ ' +' + exports.humanize(this.diff) + '\u001b[0m'; |
} else { |
args[0] = new Date().toUTCString() |
+ ' ' + name + ' ' + args[0]; |
} |
return args; |
} |
|
/** |
* Invokes `console.error()` with the specified arguments. |
*/ |
|
function log() { |
return stream.write(util.format.apply(this, arguments) + '\n'); |
} |
|
/** |
* Save `namespaces`. |
* |
* @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; |
} |
} |
|
/** |
* Load `namespaces`. |
* |
* @return {String} returns the previously persisted debug modes |
* @api private |
*/ |
|
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; |
} |
|
/** |
* Enable namespaces listed in `process.env.DEBUG` initially. |
*/ |
|
exports.enable(load()); |