| /* |
| A console.log that won't leave you hanging when node exits |
| 90% of this file was ripped from node.js |
| |
| License: see: https://github.com/joyent/node/blob/master/lib/console.js |
| */ |
| |
| // console object |
| var formatRegExp = /%[sdj]/g; |
| function format(f) { |
| var util = require('util'); |
| |
| if (typeof f !== 'string') { |
| var objects = []; |
| for (var i = 0; i < arguments.length; i++) { |
| objects.push(util.inspect(arguments[i])); |
| } |
| return objects.join(' '); |
| } |
| |
| |
| var i = 1; |
| var args = arguments; |
| var str = String(f).replace(formatRegExp, function(x) { |
| switch (x) { |
| case '%s': return String(args[i++]); |
| case '%d': return Number(args[i++]); |
| case '%j': return JSON.stringify(args[i++]); |
| default: |
| return x; |
| } |
| }); |
| for (var len = args.length, x = args[i]; i < len; x = args[++i]) { |
| if (x === null || typeof x !== 'object') { |
| str += ' ' + x; |
| } else { |
| str += ' ' + util.inspect(x); |
| } |
| } |
| return str; |
| } |
| |
| console.log = function() { |
| var res = process.stdout.write(format.apply(this, arguments) + '\n'); |
| |
| // this is the first time stdout got backed up |
| if (!res && !process.stdout.pendingWrite) { |
| process.stdout.pendingWrite = true; |
| |
| // magic sauce: keep node alive until stdout has flushed |
| process.stdout.once('drain', function () { |
| process.stdout.draining = false; |
| }); |
| } |
| }; |