Skip to content

Commit

Permalink
[fix] Remove all internal symbols before invoking util.inspect.
Browse files Browse the repository at this point in the history
  • Loading branch information
indexzero committed Jan 31, 2019
1 parent b29a596 commit a7da3e9
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 10 deletions.
19 changes: 14 additions & 5 deletions pretty-print.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const inspect = require('util').inspect;
const format = require('./format');
const { LEVEL, MESSAGE } = require('triple-beam');
const { LEVEL, MESSAGE, SPLAT } = require('triple-beam');

/*
* function prettyPrint (info)
Expand All @@ -11,9 +11,18 @@ const { LEVEL, MESSAGE } = require('triple-beam');
* { prettyPrint: true } to transports in `winston < 3.0.0`.
*/
module.exports = format((info, opts = {}) => {
// info[LEVEL] is enumerable here, so util.inspect would print it; so it must be manually stripped
const strippedInfo = Object.assign({}, info);
delete strippedInfo[LEVEL];
info[MESSAGE] = inspect(strippedInfo, false, opts.depth || null, opts.colorize);
//
// info[{LEVEL, MESSAGE, SPLAT}] are enumerable here. Since they
// are internal, we remove them before util.inspect so they
// are not printed.
//
const {
[LEVEL]: level, // eslint-disable-line no-unused-vars
[MESSAGE]: message, // eslint-disable-line no-unused-vars
[SPLAT]: splat, // eslint-disable-line no-unused-vars
...stripped
} = info;

info[MESSAGE] = inspect(stripped, false, opts.depth || null, opts.colorize);
return info;
});
42 changes: 37 additions & 5 deletions test/pretty-print.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,51 @@
const util = require('util');
const assume = require('assume');
const prettyPrint = require('../pretty-print');
const helpers = require('./helpers');
const { MESSAGE } = require('triple-beam');
const { assumeFormatted, infoify } = require('./helpers');
const { LEVEL, MESSAGE, SPLAT } = require('triple-beam');

describe('prettyPrint', () => {
it('prettyPrint() (default) sets info[MESSAGE]', helpers.assumeFormatted(
it('prettyPrint() (default) sets info[MESSAGE]', assumeFormatted(
prettyPrint(),
{ level: 'info', message: 'yay template strings are fast' },
infoify({ level: 'info', message: 'yay template strings are fast' }),
(info, expected) => {
assume(info.level).is.a('string');
assume(info.message).is.a('string');
assume(info.level).equals('info');
assume(info.message).equals('yay template strings are fast');
assume(info[MESSAGE]).equals(util.inspect(expected));

const {
[LEVEL]: level, // eslint-disable-line no-unused-vars
[MESSAGE]: message, // eslint-disable-line no-unused-vars
[SPLAT]: splat, // eslint-disable-line no-unused-vars
...stripped
} = info;

assume(info[MESSAGE]).equals(util.inspect(stripped));
}
));

it('prettyPrint() (default) strips info[SPLAT]', assumeFormatted(
prettyPrint(),
infoify({
level: 'info',
message: 'yay template strings are fast',
[SPLAT]: [1, 2, 3]
}),
(info, expected) => {
assume(info.level).is.a('string');
assume(info.message).is.a('string');
assume(info.level).equals('info');
assume(info.message).equals('yay template strings are fast');

const {
[LEVEL]: level, // eslint-disable-line no-unused-vars
[MESSAGE]: message, // eslint-disable-line no-unused-vars
[SPLAT]: splat, // eslint-disable-line no-unused-vars
...stripped
} = info;

assume(info[MESSAGE]).equals(util.inspect(stripped));
}
));
});

0 comments on commit a7da3e9

Please sign in to comment.