diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 46a7d93..ebcc68e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - node-version: [10, 12, 14, 15, 16] + node-version: [18, 20] debug: [2, 3, 4] steps: - name: Checkout diff --git a/.gitignore b/.gitignore index 3638b2e..d3d98cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ node_modules/ +package-lock.json coverage/ .nyc_output/ +.tap/ tmp/ npm-debug.log* .DS_Store -.idea \ No newline at end of file +.idea +.vscode diff --git a/.npmignore b/.npmignore index 2b5d81d..30480a2 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1,7 @@ example/ coverage/ -.nyc_output/ \ No newline at end of file +.nyc_output/ +.tap/ +scripts/ +.github/ +test/ \ No newline at end of file diff --git a/.nycrc.yml b/.nycrc.yml new file mode 100644 index 0000000..ba8cb3d --- /dev/null +++ b/.nycrc.yml @@ -0,0 +1,8 @@ +use-spawn-wrap: true +include: [index.js, debug.js] +reporter: [text, lcov, html] +check-coverage: true +statements: 100 +branches: 97 +functions: 100 +lines: 100 diff --git a/.taprc b/.taprc index b293983..f626fe1 100644 --- a/.taprc +++ b/.taprc @@ -1,5 +1,4 @@ -esm: false -ts: false -jsx: false -coverage: true timeout: 480 +reporter: terse +include: [test/*.js] +disable-coverage: true diff --git a/benchmarks/basic.bench.js b/benchmarks/basic.bench.js index ac83dde..203dd7d 100644 --- a/benchmarks/basic.bench.js +++ b/benchmarks/basic.bench.js @@ -1,13 +1,13 @@ 'use strict' -var wrap = require('module').wrap -var bench = require('fastbench') -var pino = require('pino') -var fs = require('fs') -var dest = process.platform === 'win32' ? fs.createWriteStream('\\\\.\\NUL') : fs.createWriteStream('/dev/null') -var plog = pino(dest) +const wrap = require('module').wrap +const bench = require('fastbench') +let pino = require('pino') +const fs = require('fs') +const dest = process.platform === 'win32' ? fs.createWriteStream('\\\\.\\NUL') : fs.createWriteStream('/dev/null') +const plog = pino(dest) process.env.DEBUG = 'dlog' -var dlog = require('debug')('dlog') +const dlog = require('debug')('dlog') dlog.log = function (s) { dest.write(s) } delete require.cache[require.resolve('debug')] @@ -16,8 +16,8 @@ delete require.cache[require.resolve('debug/src/node')] delete require.cache[require.resolve('pino')] pino = require('pino') -require('../')(pino({level: 'debug'}, dest)) -var pdlog = require('debug')('dlog') +require('../')(pino({ level: 'debug' }, dest)) +const pdlog = require('debug')('dlog') delete require.cache[require.resolve('debug')] delete require.cache[require.resolve('debug/src/debug.js')] @@ -28,31 +28,31 @@ require('module').wrap = wrap delete require.cache[require.resolve('pino')] pino = require('pino') -require('../')(pino({extreme: true, level: 'debug'}, dest)) -var pedlog = require('debug')('dlog') +require('../')(pino({ extreme: true, level: 'debug' }, dest)) +const pedlog = require('debug')('dlog') -var max = 10 -var run = bench([ +const max = 10 +const run = bench([ function benchPino (cb) { - for (var i = 0; i < max; i++) { + for (let i = 0; i < max; i++) { plog.info('hello world') } setImmediate(cb) }, function benchDebug (cb) { - for (var i = 0; i < max; i++) { + for (let i = 0; i < max; i++) { dlog('hello world') } setImmediate(cb) }, function benchPinoDebug (cb) { - for (var i = 0; i < max; i++) { + for (let i = 0; i < max; i++) { pdlog('hello world') } setImmediate(cb) }, function benchPinoExtremeDebug (cb) { - for (var i = 0; i < max; i++) { + for (let i = 0; i < max; i++) { pedlog('hello world') } setImmediate(cb) diff --git a/benchmarks/deep-object.bench.js b/benchmarks/deep-object.bench.js index ff60da7..0b613bf 100644 --- a/benchmarks/deep-object.bench.js +++ b/benchmarks/deep-object.bench.js @@ -1,13 +1,13 @@ 'use strict' -var wrap = require('module').wrap -var bench = require('fastbench') -var pino = require('pino') -var fs = require('fs') -var dest = process.platform === 'win32' ? fs.createWriteStream('\\\\.\\NUL') : fs.createWriteStream('/dev/null') -var plog = pino(dest) +const wrap = require('module').wrap +const bench = require('fastbench') +let pino = require('pino') +const fs = require('fs') +const dest = process.platform === 'win32' ? fs.createWriteStream('\\\\.\\NUL') : fs.createWriteStream('/dev/null') +const plog = pino(dest) process.env.DEBUG = 'dlog' -var dlog = require('debug')('dlog') +const dlog = require('debug')('dlog') dlog.log = function (s) { dest.write(s) } delete require.cache[require.resolve('debug')] @@ -16,8 +16,8 @@ delete require.cache[require.resolve('debug/src/node')] delete require.cache[require.resolve('pino')] pino = require('pino') -require('../')(pino({level: 'debug'}, dest)) -var pdlog = require('debug')('dlog') +require('../')(pino({ level: 'debug' }, dest)) +const pdlog = require('debug')('dlog') delete require.cache[require.resolve('debug')] delete require.cache[require.resolve('debug/src/debug.js')] @@ -28,37 +28,37 @@ require('module').wrap = wrap delete require.cache[require.resolve('pino')] pino = require('pino') -require('../')(pino({extreme: true, level: 'debug'}, dest)) -var pedlog = require('debug')('dlog') +require('../')(pino({ extreme: true, level: 'debug' }, dest)) +const pedlog = require('debug')('dlog') -var deep = require('../package.json') +const deep = require('../package.json') deep.deep = Object.assign({}, JSON.parse(JSON.stringify(deep))) deep.deep.deep = Object.assign({}, JSON.parse(JSON.stringify(deep))) deep.deep.deep.deep = Object.assign({}, JSON.parse(JSON.stringify(deep))) -var max = 10 +const max = 10 -var run = bench([ +const run = bench([ function benchPinoDeepObj (cb) { - for (var i = 0; i < max; i++) { + for (let i = 0; i < max; i++) { plog.info(deep) } setImmediate(cb) }, function benchDebugDeepObj (cb) { - for (var i = 0; i < max; i++) { + for (let i = 0; i < max; i++) { dlog(deep) } setImmediate(cb) }, function benchPinoDebugDeepObj (cb) { - for (var i = 0; i < max; i++) { + for (let i = 0; i < max; i++) { pdlog(deep) } setImmediate(cb) }, function benchPinoExtremeDebugDeepObj (cb) { - for (var i = 0; i < max; i++) { + for (let i = 0; i < max; i++) { pedlog(deep) } setImmediate(cb) diff --git a/benchmarks/object.bench.js b/benchmarks/object.bench.js index 96c7c31..8a0981b 100644 --- a/benchmarks/object.bench.js +++ b/benchmarks/object.bench.js @@ -1,13 +1,13 @@ 'use strict' -var wrap = require('module').wrap -var bench = require('fastbench') -var pino = require('pino') -var fs = require('fs') -var dest = process.platform === 'win32' ? fs.createWriteStream('\\\\.\\NUL') : fs.createWriteStream('/dev/null') -var plog = pino(dest) +const wrap = require('module').wrap +const bench = require('fastbench') +let pino = require('pino') +const fs = require('fs') +const dest = process.platform === 'win32' ? fs.createWriteStream('\\\\.\\NUL') : fs.createWriteStream('/dev/null') +const plog = pino(dest) process.env.DEBUG = 'dlog' -var dlog = require('debug')('dlog') +const dlog = require('debug')('dlog') dlog.log = function (s) { dest.write(s) } delete require.cache[require.resolve('debug')] @@ -16,8 +16,8 @@ delete require.cache[require.resolve('debug/src/node')] delete require.cache[require.resolve('pino')] pino = require('pino') -require('../')(pino({level: 'debug'}, dest)) -var pdlog = require('debug')('dlog') +require('../')(pino({ level: 'debug' }, dest)) +const pdlog = require('debug')('dlog') delete require.cache[require.resolve('debug')] delete require.cache[require.resolve('debug/src/debug.js')] @@ -26,33 +26,33 @@ delete require.cache[require.resolve('../')] delete require.cache[require.resolve('../debug')] require('module').wrap = wrap -require('../')(pino({extreme: true, level: 'debug'}, dest)) -var pedlog = require('debug')('dlog') +require('../')(pino({ extreme: true, level: 'debug' }, dest)) +const pedlog = require('debug')('dlog') -var max = 10 +const max = 10 -var run = bench([ +const run = bench([ function benchPinoObj (cb) { - for (var i = 0; i < max; i++) { - plog.info({hello: 'world'}) + for (let i = 0; i < max; i++) { + plog.info({ hello: 'world' }) } setImmediate(cb) }, function benchDebugObj (cb) { - for (var i = 0; i < max; i++) { - dlog({hello: 'world'}) + for (let i = 0; i < max; i++) { + dlog({ hello: 'world' }) } setImmediate(cb) }, function benchPinoDebugObj (cb) { - for (var i = 0; i < max; i++) { - pdlog({hello: 'world'}) + for (let i = 0; i < max; i++) { + pdlog({ hello: 'world' }) } setImmediate(cb) }, function benchPinoExtremeDebugDeepObj (cb) { - for (var i = 0; i < max; i++) { - pedlog({hello: 'world'}) + for (let i = 0; i < max; i++) { + pedlog({ hello: 'world' }) } setImmediate(cb) } diff --git a/benchmarks/runbench.js b/benchmarks/runbench.js index f6400f0..fea6c84 100644 --- a/benchmarks/runbench.js +++ b/benchmarks/runbench.js @@ -1,12 +1,12 @@ 'use strict' -var fs = require('fs') -var path = require('path') -var spawn = require('child_process').spawn -var pump = require('pump') -var split = require('split2') -var through = require('through2') -var steed = require('steed') +const fs = require('fs') +const path = require('path') +const spawn = require('child_process').spawn +const pump = require('pump') +const split = require('split2') +const through = require('through2') +const steed = require('steed') function usage () { return fs.createReadStream(path.join(__dirname, 'usage.txt')) @@ -17,22 +17,22 @@ if (!process.argv[2]) { process.exit() } -var selectedBenchmark = process.argv[2].toLowerCase() -var benchmarkDir = path.resolve(__dirname) -var benchmarks = { +let selectedBenchmark = process.argv[2].toLowerCase() +const benchmarkDir = path.resolve(__dirname) +const benchmarks = { basic: 'basic.bench.js', object: 'object.bench.js', deepobject: 'deep-object.bench.js' } function runBenchmark (name, done) { - var benchmarkResults = {} + const benchmarkResults = {} benchmarkResults[name] = {} - var processor = through(function (line, enc, cb) { - var parts = ('' + line).split(': ') - var parts2 = parts[0].split('*') - var logger = parts2[0].replace('bench', '') + const processor = through(function (line, enc, cb) { + const parts = ('' + line).split(': ') + const parts2 = parts[0].split('*') + const logger = parts2[0].replace('bench', '') if (!benchmarkResults[name][logger]) benchmarkResults[name][logger] = [] @@ -45,7 +45,7 @@ function runBenchmark (name, done) { }) console.log('Running ' + name.toUpperCase() + ' benchmark\n') - var benchmark = spawn( + const benchmark = spawn( process.argv[0], [path.join(benchmarkDir, benchmarks[name])] ) @@ -60,8 +60,8 @@ function runBenchmark (name, done) { } function sum (ar) { - var result = 0 - for (var i = 0; i < ar.length; i += 1) { + let result = 0 + for (let i = 0; i < ar.length; i += 1) { result += Number.parseFloat(ar[i].time) } return result @@ -69,14 +69,14 @@ function sum (ar) { function displayResults (results) { console.log('==========') - var benchNames = Object.keys(results) - for (var i = 0; i < benchNames.length; i += 1) { + const benchNames = Object.keys(results) + for (let i = 0; i < benchNames.length; i += 1) { console.log(benchNames[i] + ' averages') - var benchmark = results[benchNames[i]] - var loggers = Object.keys(benchmark) - for (var j = 0; j < loggers.length; j += 1) { - var logger = benchmark[loggers[j]] - var average = Math.round(sum(logger) / logger.length) + const benchmark = results[benchNames[i]] + const loggers = Object.keys(benchmark) + for (let j = 0; j < loggers.length; j += 1) { + const logger = benchmark[loggers[j]] + const average = Math.round(sum(logger) / logger.length) console.log(loggers[j] + ' average: ' + average) } } @@ -87,14 +87,14 @@ function toBench (done) { runBenchmark(this.name, done) } -var benchQueue = [] +const benchQueue = [] if (selectedBenchmark !== 'all') { - benchQueue.push(toBench.bind({name: selectedBenchmark})) + benchQueue.push(toBench.bind({ name: selectedBenchmark })) } else { - var keys = Object.keys(benchmarks) - for (var i = 0; i < keys.length; i += 1) { + const keys = Object.keys(benchmarks) + for (let i = 0; i < keys.length; i += 1) { selectedBenchmark = keys[i] - benchQueue.push(toBench.bind({name: selectedBenchmark})) + benchQueue.push(toBench.bind({ name: selectedBenchmark })) } } steed.series(benchQueue, function (err, results) { diff --git a/debug.js b/debug.js index 3f186f4..3b80634 100644 --- a/debug.js +++ b/debug.js @@ -8,8 +8,8 @@ function debug (namespace) { 'register pino-debug at the top of your entry point') } - var logger = debug.logger.child({'ns': namespace}) - var log = Array.from(debug.map.keys()).map(function (rx) { + const logger = debug.logger.child({ ns: namespace }) + const log = Array.from(debug.map.keys()).map(function (rx) { return rx.test(namespace) && logger[debug.map.get(rx)] }).filter(Boolean)[0] || logger.debug @@ -20,7 +20,7 @@ function debug (namespace) { } enabled.enabled = true - var fn = debug.enabled(namespace) ? enabled : disabled + const fn = debug.enabled(namespace) ? enabled : disabled fn.extend = function (subNamespace, delimiter) { return debug(namespace + (delimiter || ':') + subNamespace) } diff --git a/example/app.js b/example/app.js index d1dbd2d..f6553c3 100644 --- a/example/app.js +++ b/example/app.js @@ -1,13 +1,13 @@ -var express = require('express') -var path = require('path') -var logger = require('morgan') -var cookieParser = require('cookie-parser') -var bodyParser = require('body-parser') +const express = require('express') +const path = require('path') +const logger = require('morgan') +const cookieParser = require('cookie-parser') +const bodyParser = require('body-parser') -var index = require('./routes/index') -var users = require('./routes/users') +const index = require('./routes/index') +const users = require('./routes/users') -var app = express() +const app = express() // view engine setup app.set('views', path.join(__dirname, 'views')) @@ -24,7 +24,7 @@ app.use('/users', users) // catch 404 and forward to error handler app.use(function (req, res, next) { - var err = new Error('Not Found') + const err = new Error('Not Found') err.status = 404 next(err) }) diff --git a/example/routes/index.js b/example/routes/index.js index a306a5c..4092548 100644 --- a/example/routes/index.js +++ b/example/routes/index.js @@ -1,5 +1,5 @@ -var express = require('express') -var router = express.Router() +const express = require('express') +const router = express.Router() /* GET home page. */ router.get('/', function (req, res, next) { res.render('index', { title: 'Express' }) diff --git a/example/routes/users.js b/example/routes/users.js index 8cfe88f..f37ae1b 100644 --- a/example/routes/users.js +++ b/example/routes/users.js @@ -1,5 +1,5 @@ -var express = require('express') -var router = express.Router() +const express = require('express') +const router = express.Router() /* GET users listing. */ router.get('/', function (req, res, next) { diff --git a/index.js b/index.js index 8d5ff0d..f5b70b6 100644 --- a/index.js +++ b/index.js @@ -1,11 +1,12 @@ 'use strict' -var pino = require('pino') +const pino = require('pino') require('module').wrap = override -var debug = require('debug') +const debug = require('debug') module.exports = pinoDebug +/* istanbul ignore next */ if (module.parent && module.parent.parent === null && module.parent.filename === null) { // preloaded with -r flag pinoDebug() @@ -15,15 +16,15 @@ function pinoDebug (logger, opts) { if (pinoDebug.called) throw Error('pino-debug can only be called once') pinoDebug.called = true opts = opts || {} - var auto = 'auto' in opts ? opts.auto : true - var map = opts.map || {} - var namespaces = getNamespaces() + const auto = 'auto' in opts ? opts.auto : true + const map = opts.map || {} + const namespaces = getNamespaces() debug.map = Object.keys(map).sort(byPrecision).reduce(function (m, k) { if (auto) namespaces.push(k) m.set(RegExp('^' + k.replace(/[\\^$+?.()|[\]{}]/g, '\\$&').replace(/\*/g, '.*?') + '$'), map[k]) return m }, new Map()) - debug.logger = logger || pino({level: 'debug'}) + debug.logger = logger || pino({ level: 'debug' }) if (opts.skip) { opts.skip.map(function (ns) { return '-' + ns }).forEach(function (ns) { namespaces.push(ns) }) } @@ -31,7 +32,7 @@ function pinoDebug (logger, opts) { } function getNamespaces () { - var namespaces = process.env.DEBUG + const namespaces = process.env.DEBUG if (namespaces != null) { return (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/) } @@ -39,8 +40,8 @@ function getNamespaces () { } function byPrecision (a, b) { - var aix = a.indexOf('*') - var bix = b.indexOf('*') + const aix = a.indexOf('*') + const bix = b.indexOf('*') if (aix === -1 && bix === -1) return 0 if (~aix && ~bix) { if (aix > bix) return -1 @@ -57,9 +58,9 @@ function override (script) { // F:\Projekty\Learn\pino-debug\debug.js) will be interpreted during interpolation // as F:ProjektyLearnpino-debugdebug.js and node.js will throw error // Cannot find module 'F:ProjektyLearnpino-debugdebug.js' - var pathToPinoDebug = require.resolve('./debug').replace(/\\/g, '\\\\') + const pathToPinoDebug = require.resolve('./debug').replace(/\\/g, '\\\\') - var head = `(function(exports, require, module, __filename, __dirname) { + const head = `(function(exports, require, module, __filename, __dirname) { require = (function (req) { var pinoDebugOs = require('os') var pinoDebugPath = require('path') @@ -99,7 +100,7 @@ function override (script) { }(require)) return (function(){ `.trim().replace(/\n/g, ';').replace(/\s+/g, ' ').replace(/;+/g, ';') - var tail = '\n}).call(this);})' + const tail = '\n}).call(this);})' return head + script + tail } diff --git a/package.json b/package.json index aacfc30..1326227 100644 --- a/package.json +++ b/package.json @@ -4,16 +4,21 @@ "description": "High performance debug logging", "main": "index.js", "scripts": { - "test": "dependency-check --no-dev . && cross-env NODE_ENV=test tap test/*.js", - "test-2.3": "npm i debug@2.3 && npm run test", - "test-2.4": "npm i debug@2.4 && npm run test", - "test-2.5": "npm i debug@2.5 && npm run test", - "test-2.6": "npm i debug@2.6 && npm run test", - "test-3.1": "npm i debug@3.1 && npm run test", - "test-4.1": "npm i debug@4.1 && npm run test", - "test:cov": "standard && npm run deps && cross-env NODE_ENV=test tap --cov test/*.js", - "ci": "npm test -- --coverage-report=lcov", - "test:cov:html": "standard && npm run deps && cross-env NODE_ENV=test tap --coverage-report=html test", + "test": "npm run deps && standard && npm run test:unit", + "deps": "knip --production --dependencies", + "standard": "standard", + "standard:fix": "standard --fix", + "test:unit": "cross-env NODE_ENV=test nyc tap", + "test:watch": "cross-env NODE_ENV=test tap repl w", + "test:with-debug": "npm i --no-save --no-audit --no-fund debug@$DEBUG_VERSION && npm run test:unit -- --after scripts/npmi", + "test-2.3": "cross-env DEBUG_VERSION=2.3 npm run test:with-debug", + "test-2.4": "cross-env DEBUG_VERSION=2.4 npm run test:with-debug", + "test-2.5": "cross-env DEBUG_VERSION=2.5 npm run test:with-debug", + "test-2.6": "cross-env DEBUG_VERSION=2.6 npm run test:with-debug", + "test-3.1": "cross-env DEBUG_VERSION=3.1 npm run test:with-debug", + "test-4.1": "cross-env DEBUG_VERSION=4.1 npm run test:with-debug", + "test-all": "npm run test-2.3 && npm run test-2.4 && npm run test-2.5 && npm run test-2.6 && npm run test-3.1 && npm run test-4.1", + "ci": "npm test", "bench": "node benchmarks/runbench all", "bench-basic": "node benchmarks/runbench basic", "bench-object": "node benchmarks/runbench object", @@ -31,20 +36,21 @@ ], "license": "MIT", "dependencies": { - "pino": "^6.0.2" + "pino": "^8.0.0" }, "peerDependencies": { "debug": ">=2" }, "devDependencies": { "cross-env": "^7.0.3", - "dependency-check": "^4.0.0", "fastbench": "^1.0.1", + "knip": "^5.1.2", + "nyc": "^15.1.0", "pump": "^3.0.0", - "split2": "^4.0.0", - "standard": "^17.0.0", + "split2": "^4.2.0", + "standard": "^17.1.0", "steed": "^1.1.3", - "tap": "^14.0.0", - "through2": "^4.0.0" + "tap": "^18.7.1", + "through2": "^4.0.2" } } diff --git a/scripts/npmi.js b/scripts/npmi.js new file mode 100644 index 0000000..119b586 --- /dev/null +++ b/scripts/npmi.js @@ -0,0 +1,3 @@ +// Cleanup after testing specific debug version +const { spawnSync } = require('child_process') +spawnSync('npm', ['i'], { stdio: 'ignore' }) diff --git a/test/fixtures/line-numbers.js b/test/fixtures/line-numbers.js index 1519fd0..1a29c14 100644 --- a/test/fixtures/line-numbers.js +++ b/test/fixtures/line-numbers.js @@ -1,8 +1,8 @@ module.exports = function lineNum () { - var orig = Error.prepareStackTrace + const orig = Error.prepareStackTrace Error.prepareStackTrace = function (_, stack) { return stack } - var err = new Error() - var stack = err.stack + const err = new Error() + const stack = err.stack Error.prepareStackTrace = orig return stack[0].getLineNumber() } diff --git a/test/fixtures/object-override.js b/test/fixtures/object-override.js index c1821c1..95f9870 100644 --- a/test/fixtures/object-override.js +++ b/test/fixtures/object-override.js @@ -1,5 +1,5 @@ 'use strict' // stylus literally does this -- https://git.io/vyPlO -var Object = function Object () {} +const Object = function Object () {} module.exports = Object diff --git a/test/fixtures/strict-mode.js b/test/fixtures/strict-mode.js index 8e315a1..e6ee2ae 100644 --- a/test/fixtures/strict-mode.js +++ b/test/fixtures/strict-mode.js @@ -1,5 +1,6 @@ 'use strict' +/* eslint-disable-next-line */ eval('var test = 123') // This will evaluate to `true` if strict mode is enabled diff --git a/test/index.js b/test/index.js index 37345bd..69a8b19 100644 --- a/test/index.js +++ b/test/index.js @@ -1,8 +1,10 @@ 'use strict' -var execSync = require('child_process').execSync -var tap = require('tap') -var through = require('through2') -var test = tap.test + +const path = require('path') +const { exec, execSync } = require('child_process') +const tap = require('tap') +const through = require('through2') +const test = tap.test const debugModules = [ // <= 2.4 @@ -29,7 +31,7 @@ const commonModules = [ './' ] -tap.afterEach((done) => { +tap.afterEach(() => { let err = null for (const modules of debugModules) { try { @@ -46,12 +48,11 @@ tap.afterEach((done) => { throw err } process.env.DEBUG = '' - done() }) test('throws if called more than once', (t) => { - var pinoDebug = require('../') - t.throw(() => { + const pinoDebug = require('../') + t.throws(() => { pinoDebug() pinoDebug() }) @@ -60,86 +61,93 @@ test('throws if called more than once', (t) => { test('throws if debug is called after requiring but before calling pinoDebug', (t) => { require('../') - var debug = require('debug') - t.throw(() => debug('ns')) + const debug = require('debug') + t.throws(() => debug('ns')) t.end() }) test('captures any calls to `debug` and passes them through pino logger', (t) => { - var pinoDebug = require('../') - var stream = through((line, _, cb) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test') - t.is(obj.ns, 'ns') + const pinoDebug = require('../') + const stream = through((line, _, cb) => { + const obj = JSON.parse(line) + t.equal(obj.msg, 'test') + t.equal(obj.ns, 'ns') t.end() }) - pinoDebug(require('pino')({level: 'debug'}, stream)) - var debug = require('debug') + pinoDebug(require('pino')({ level: 'debug' }, stream)) + const debug = require('debug') debug.enable('ns') debug('ns')('test') }) test('defaults to calling pinoInstance.debug', (t) => { - var pinoDebug = require('../') - var stream = through((line, _, cb) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test') - t.is(obj.ns, 'ns') - t.is(obj.level, 20) + const pinoDebug = require('../') + const stream = through((line, _, cb) => { + const obj = JSON.parse(line) + t.equal(obj.msg, 'test') + t.equal(obj.ns, 'ns') + t.equal(obj.level, 20) t.end() }) - pinoDebug(require('pino')({level: 'debug'}, stream)) - var debug = require('debug') + pinoDebug(require('pino')({ level: 'debug' }, stream)) + const debug = require('debug') debug.enable('ns') debug('ns')('test') }) test('when passed no args, creates a standard pino logger with log level set to debug and logs to it\'s debug method', (t) => { - var program = ` - var pinoDebug = require('${__dirname}/../') + const debug = path.join(__dirname, '..') + const program = ` + var pinoDebug = require('${debug}') var write = process.stdout.write pinoDebug() var debug = require('debug') debug.enable('ns') debug('ns')('test') ` - var line = execSync(`${process.argv[0]} -e "${program}"`).toString() - var obj = JSON.parse(line) - t.is(obj.msg, 'test') - t.is(obj.ns, 'ns') - t.is(obj.level, 20) - t.end() + + exec(`${process.argv[0]} -e "${program}"`, (err, stdout, stderr) => { + t.error(err) + console.log(stdout.toString()) + console.log(stderr.toString()) + const line = stdout.toString() + const obj = JSON.parse(line) + t.equal(obj.msg, 'test') + t.equal(obj.ns, 'ns') + t.equal(obj.level, 20) + t.end() + }) }) test('passes debug args to pino log method according to opts.map', (t) => { - var pinoDebug = require('../') - var stream = through((line, _, cb) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test') - t.is(obj.ns, 'ns') - t.is(obj.level, 30) + const pinoDebug = require('../') + const stream = through((line, _, cb) => { + const obj = JSON.parse(line) + t.equal(obj.msg, 'test') + t.equal(obj.ns, 'ns') + t.equal(obj.level, 30) t.end() }) - pinoDebug(require('pino')(stream), {map: {ns: 'info'}}) - var debug = require('debug') + pinoDebug(require('pino')(stream), { map: { ns: 'info' } }) + const debug = require('debug') debug('ns')('test') }) test('passes debug args to pino log method according to opts.map when auto is off but namespaces have been enabled', (t) => { - var pinoDebug = require('../') - var ns = (line) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test') - t.is(obj.ns, 'ns') - t.is(obj.level, 30) + const pinoDebug = require('../') + const ns = (line) => { + const obj = JSON.parse(line) + t.equal(obj.msg, 'test') + t.equal(obj.ns, 'ns') + t.equal(obj.level, 30) } - var ns2 = (line) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test2') - t.is(obj.ns, 'ns2') - t.is(obj.level, 40) + const ns2 = (line) => { + const obj = JSON.parse(line) + t.equal(obj.msg, 'test2') + t.equal(obj.ns, 'ns2') + t.equal(obj.level, 40) } - var stream = through((line, _, cb) => { + const stream = through((line, _, cb) => { if (!ns.called) { ns(line) ns.called = true @@ -150,8 +158,8 @@ test('passes debug args to pino log method according to opts.map when auto is of t.end() }) - pinoDebug(require('pino')(stream), {auto: false, map: {ns: 'info', ns2: 'warn'}}) - var debug = require('debug') + pinoDebug(require('pino')(stream), { auto: false, map: { ns: 'info', ns2: 'warn' } }) + let debug = require('debug') debug.enable('ns') debug('ns')('test') debug = require('debug') @@ -160,110 +168,111 @@ test('passes debug args to pino log method according to opts.map when auto is of }) test('does not pass debug args to pino log method according to opts.map when auto is off and namespaces have not been enabled', (t) => { - var pinoDebug = require('../') + const pinoDebug = require('../') - var stream = through((line, _, cb) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test2') - t.is(obj.ns, 'ns2') - t.is(obj.level, 40) + const stream = through((line, _, cb) => { + const obj = JSON.parse(line) + t.equal(obj.msg, 'test2') + t.equal(obj.ns, 'ns2') + t.equal(obj.level, 40) t.end() cb() }) - pinoDebug(require('pino')(stream), {auto: false, map: {ns: 'info', ns2: 'warn'}}) - var debug = require('debug') + pinoDebug(require('pino')(stream), { auto: false, map: { ns: 'info', ns2: 'warn' } }) + const debug = require('debug') debug.enable('ns2') debug('ns')('test') debug('ns2')('test2') }) test('when preloaded with -r, automatically logs all debug calls with log level debug to a default pino logger', (t) => { - var program = ` + const program = ` var debug = require('debug') debug('ns')('test') ` - var line = execSync(`${process.argv[0]} -r ${__dirname}/../ -e "${program}"`, {env: {DEBUG: '*'}}).toString() - var obj = JSON.parse(line) - t.is(obj.msg, 'test') - t.is(obj.ns, 'ns') - t.is(obj.level, 20) + const debug = path.join(__dirname, '..') + const line = execSync(`${process.argv[0]} -r ${debug} -e "${program}"`, { env: { DEBUG: '*' } }).toString() + const obj = JSON.parse(line) + t.equal(obj.msg, 'test') + t.equal(obj.ns, 'ns') + t.equal(obj.level, 20) t.end() }) test('opts.skip filters out any matching namespaces', (t) => { - var pinoDebug = require('../') + const pinoDebug = require('../') - var stream = through((line, _, cb) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test') - t.is(obj.ns, 'ns') - t.is(obj.level, 30) + const stream = through((line, _, cb) => { + const obj = JSON.parse(line) + t.equal(obj.msg, 'test') + t.equal(obj.ns, 'ns') + t.equal(obj.level, 30) t.end() cb() }) pinoDebug(require('pino')(stream), { - map: {'ns*': 'info'}, + map: { 'ns*': 'info' }, skip: ['ns2'] }) - var debug = require('debug') + const debug = require('debug') debug('ns2')('test2') debug('ns')('test') }) test('when there is a match conflict, log level is set to most precise match', (t) => { - var pinoDebug = require('../') + const pinoDebug = require('../') - var queue = [(line) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test') - t.is(obj.ns, 'ns') - t.is(obj.level, 30) + const queue = [(line) => { + const obj = JSON.parse(line) + t.equal(obj.msg, 'test') + t.equal(obj.ns, 'ns') + t.equal(obj.level, 30) }, (line) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test2') - t.is(obj.ns, 'ns2') - t.is(obj.level, 40) + const obj = JSON.parse(line) + t.equal(obj.msg, 'test2') + t.equal(obj.ns, 'ns2') + t.equal(obj.level, 40) }, (line) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test3') - t.is(obj.ns, 'meow') - t.is(obj.level, 50) + const obj = JSON.parse(line) + t.equal(obj.msg, 'test3') + t.equal(obj.ns, 'meow') + t.equal(obj.level, 50) }, (line) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test4') - t.is(obj.ns, 'izikilla') - t.is(obj.level, 60) + const obj = JSON.parse(line) + t.equal(obj.msg, 'test4') + t.equal(obj.ns, 'izikilla') + t.equal(obj.level, 60) }, (line) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test5') - t.is(obj.ns, 'testtracetest') - t.is(obj.level, 10) + const obj = JSON.parse(line) + t.equal(obj.msg, 'test5') + t.equal(obj.ns, 'testtracetest') + t.equal(obj.level, 10) }, (line) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test6') - t.is(obj.ns, 'debugtra') - t.is(obj.level, 20) + const obj = JSON.parse(line) + t.equal(obj.msg, 'test6') + t.equal(obj.ns, 'debugtra') + t.equal(obj.level, 20) }, (line) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test7') - t.is(obj.ns, 'ns3') - t.is(obj.level, 20) + const obj = JSON.parse(line) + t.equal(obj.msg, 'test7') + t.equal(obj.ns, 'ns3') + t.equal(obj.level, 20) }, (line) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test8') - t.is(obj.ns, 'testbla') - t.is(obj.level, 30) + const obj = JSON.parse(line) + t.equal(obj.msg, 'test8') + t.equal(obj.ns, 'testbla') + t.equal(obj.level, 30) }] - var stream = through((line, _, cb) => { + const stream = through((line, _, cb) => { queue.shift()(line) cb() if (!queue.length) t.end() }) - pinoDebug(require('pino')({level: 'trace'}, stream), { + pinoDebug(require('pino')({ level: 'trace' }, stream), { map: { '*tra': 'debug', '*bla': 'info', @@ -275,7 +284,7 @@ test('when there is a match conflict, log level is set to most precise match', ( '*trace*': 'trace' } }) - var debug = require('debug') + const debug = require('debug') debug('ns')('test') debug('ns2')('test2') debug('meow')('test3') @@ -293,9 +302,9 @@ test('uses native `Object` regardless of wrapped file contents', (t) => { test('keeps line numbers consistent', (t) => { require('../') - var lineNums = require('./fixtures/line-numbers') - var line = lineNums() - t.is(line, 4) + const lineNums = require('./fixtures/line-numbers') + const line = lineNums() + t.equal(line, 4) t.end() }) @@ -307,31 +316,31 @@ test('results in valid syntax when source has trailing comment', (t) => { test('preserves DEBUG env independently from debug module', (t) => { process.env.DEBUG = 'ns1' - var pinoDebug = require('../') - var stream = through((line, _, cb) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test') - t.is(obj.ns, 'ns1') + const pinoDebug = require('../') + const stream = through((line, _, cb) => { + const obj = JSON.parse(line) + t.equal(obj.msg, 'test') + t.equal(obj.ns, 'ns1') t.end() }) - pinoDebug(require('pino')({level: 'debug'}, stream)) - var debug = require('debug') + pinoDebug(require('pino')({ level: 'debug' }, stream)) + const debug = require('debug') debug('ns1')('test') }) test('supports extend method', (t) => { process.env.DEBUG = '*' - var pinoDebug = require('../') - var ns = ['ns1', 'ns1:ns2', 'ns1;ns2'] - var count = 0 - var stream = through((line, _, cb) => { - var obj = JSON.parse(line) - t.is(obj.msg, 'test') - t.is(obj.ns, ns[count++]) + const pinoDebug = require('../') + const ns = ['ns1', 'ns1:ns2', 'ns1;ns2'] + let count = 0 + const stream = through((line, _, cb) => { + const obj = JSON.parse(line) + t.equal(obj.msg, 'test') + t.equal(obj.ns, ns[count++]) cb() }, () => t.end()) - pinoDebug(require('pino')({level: 'debug'}, stream)) - var debug = require('debug') + pinoDebug(require('pino')({ level: 'debug' }, stream)) + const debug = require('debug') debug('ns1')('test') debug('ns1').extend('ns2')('test') debug('ns1').extend('ns2', ';')('test') @@ -339,6 +348,6 @@ test('supports extend method', (t) => { }) test('does not invalidate strict mode', (t) => { - t.is(require('./fixtures/strict-mode'), true) + t.equal(require('./fixtures/strict-mode'), true) t.end() })