chat-server/node_modules/diagnostics/index.js

107 lines
2.4 KiB
JavaScript

'use strict';
var colorspace = require('colorspace')
, enabled = require('enabled')
, kuler = require('kuler')
, util = require('util');
/**
* Check if the terminal we're using allows the use of colors.
*
* @type {Boolean}
* @private
*/
var tty = require('tty').isatty(1);
/**
* The default stream instance we should be writing against.
*
* @type {Stream}
* @public
*/
var stream = process.stdout;
/**
* A simple environment based logger.
*
* Options:
*
* - colors: Force the use of colors or forcefully disable them. If this option
* is not supplied the colors will be based on your terminal.
* - stream: The Stream instance we should write our logs to, defaults to
* process.stdout but can be anything you like.
*
* @param {String} name The namespace of your log function.
* @param {Object} options Logger configuration.
* @returns {Function} Configured logging method.
* @api public
*/
function factory(name, options) {
if (!enabled(name)) return function diagnopes() {};
options = options || {};
options.colors = 'colors' in options ? options.colors : tty;
options.ansi = options.colors ? kuler(name, colorspace(name)) : name;
options.stream = options.stream || stream;
//
// Allow multiple streams, so make sure it's an array which makes iteration
// easier.
//
if (!Array.isArray(options.stream)) {
options.stream = [options.stream];
}
//
// The actual debug function which does the logging magic.
//
return function debug(line) {
//
// Better formatting for error instances.
//
if (line instanceof Error) line = line.stack || line.message || line;
line = [
//
// Add the colorized namespace.
//
options.ansi,
//
// The total time we took to execute the next debug statement.
//
' ',
line
].join('');
//
// Use util.format so we can follow the same API as console.log.
//
line = util.format.apply(this, [line].concat(
Array.prototype.slice.call(arguments, 1)
)) + '\n';
options.stream.forEach(function each(stream) {
stream.write(line);
});
};
}
/**
* Override the "default" stream that we write to. This allows you to globally
* configure the steams.
*
* @param {Stream} output
* @returns {function} Factory
* @api private
*/
factory.to = function to(output) {
stream = output;
return factory;
};
//
// Expose the module.
//
module.exports = factory;