console: allow options object as constructor arg

PR-URL: https://github.com/nodejs/node/pull/19372
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Anna Henningsen 2018-03-17 12:53:09 +01:00
parent 65765989d3
commit ce58df58d0
No known key found for this signature in database
GPG key ID: 9C63F3A6CD2AD8F9
2 changed files with 32 additions and 12 deletions

View file

@ -51,16 +51,28 @@ const {
// Track amount of indentation required via `console.group()`.
const kGroupIndent = Symbol('groupIndent');
function Console(stdout, stderr, ignoreErrors = true) {
function Console(options /* or: stdout, stderr, ignoreErrors = true */) {
if (!(this instanceof Console)) {
return new Console(stdout, stderr, ignoreErrors);
return new Console(...arguments);
}
let stdout, stderr, ignoreErrors;
if (options && typeof options.write !== 'function') {
({
stdout,
stderr = stdout,
ignoreErrors = true
} = options);
} else {
stdout = options;
stderr = arguments[1];
ignoreErrors = arguments[2] === undefined ? true : arguments[2];
}
if (!stdout || typeof stdout.write !== 'function') {
throw new ERR_CONSOLE_WRITABLE_STREAM('stdout');
}
if (!stderr) {
stderr = stdout;
} else if (typeof stderr.write !== 'function') {
if (!stderr || typeof stderr.write !== 'function') {
throw new ERR_CONSOLE_WRITABLE_STREAM('stderr');
}
@ -369,7 +381,10 @@ Console.prototype.table = function(tabularData, properties) {
return final(keys, values);
};
module.exports = new Console(process.stdout, process.stderr);
module.exports = new Console({
stdout: process.stdout,
stderr: process.stderr
});
module.exports.Console = Console;
function noop() {}