Skip to content

Commit

Permalink
Use pino-abstract-transport
Browse files Browse the repository at this point in the history
  • Loading branch information
mcollina committed Aug 29, 2021
1 parent b124cea commit 262dbd6
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 21 deletions.
18 changes: 4 additions & 14 deletions bin.js
Expand Up @@ -3,11 +3,9 @@
const fs = require('fs')
const args = require('args')
const path = require('path')
const pump = require('pump')
const split = require('split2')
const { Transform } = require('readable-stream')
const prettyFactory = require('./')
const build = require('./')
const CONSTANTS = require('./lib/constants')
const pump = require('pump')
const { isObject } = require('./lib/utils')

const bourne = require('@hapi/bourne')
Expand Down Expand Up @@ -88,17 +86,9 @@ opts = Object.assign({}, config, opts)
// set defaults
opts.errorLikeObjectKeys = opts.errorLikeObjectKeys || 'err,error'
opts.errorProps = opts.errorProps || ''
const pretty = prettyFactory(opts)
const prettyTransport = new Transform({
objectMode: true,
transform (chunk, enc, cb) {
const line = pretty(chunk.toString())
if (line === undefined) return cb()
cb(null, line)
}
})

pump(process.stdin, split(), prettyTransport, process.stdout)
const res = build(opts)
pump(process.stdin, res)

// https://github.com/pinojs/pino/pull/358
/* istanbul ignore next */
Expand Down
45 changes: 42 additions & 3 deletions index.js
@@ -1,8 +1,12 @@
'use strict'

const { options: coloretteOptions } = require('colorette')
const pump = require('pump')
const { Transform } = require('readable-stream')
const abstractTransport = require('pino-abstract-transport')
const jmespath = require('jmespath')
const colors = require('./lib/colors')
const sonic = require('sonic-boom')
const { ERROR_LIKE_KEYS, MESSAGE_KEY, TIMESTAMP_KEY } = require('./lib/constants')
const {
isObject,
Expand Down Expand Up @@ -165,6 +169,41 @@ function prettyFactory (options) {
}
}

prettyFactory.prettyFactory = prettyFactory
prettyFactory.default = prettyFactory
module.exports = prettyFactory
function build (opts) {
const pretty = prettyFactory(opts)
return abstractTransport(function (source) {
const stream = new Transform({
objectMode: true,
autoDestroy: true,
transform (chunk, enc, cb) {
const line = pretty(chunk)
if (line === undefined) {
cb()
return
}

cb(null, line)
}
})

const destination = sonic({ dest: opts.destination || 1, sync: false })
/* istanbul ignore else */
if (destination.fd === 1) {
// We cannot close the output
destination.end = function () {
this.emit('close')
}
}

source.on('unknown', function (line) {
destination.write(line + '\n')
})

pump(source, stream, destination)
return stream
}, { parse: 'lines' })
}

module.exports = build
module.exports.prettyFactory = prettyFactory
module.exports.default = build
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -39,10 +39,10 @@
"fast-safe-stringify": "^2.0.7",
"jmespath": "^0.15.0",
"joycon": "^3.0.0",
"pino-abstract-transport": "^0.2.0",
"pump": "^3.0.0",
"readable-stream": "^3.6.0",
"rfdc": "^1.3.0",
"split2": "^3.1.1",
"strip-json-comments": "^3.1.1"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion test/basic.test.js
Expand Up @@ -5,7 +5,7 @@ const os = require('os')
const test = require('tap').test
const pino = require('pino')
const dateformat = require('dateformat')
const _prettyFactory = require('../')
const _prettyFactory = require('../').prettyFactory

function prettyFactory (opts) {
if (!opts) {
Expand Down
17 changes: 17 additions & 0 deletions test/cli.test.js
Expand Up @@ -114,6 +114,23 @@ test('cli', (t) => {
t.teardown(() => child.kill())
})

t.test('end stdin does not end the destination', (t) => {
t.plan(2)
const child = spawn(process.argv[0], [bin], { env })
child.on('error', t.threw)

child.stdout.on('data', (data) => {
t.equal(data.toString(), 'aaa\n')
})

child.stdin.end('aaa\n')
child.on('exit', function (code) {
t.equal(code, 0)
})

t.teardown(() => child.kill())
})

;['--timestampKey', '-a'].forEach((optionName) => {
t.test(`uses specified timestamp key via ${optionName}`, (t) => {
t.plan(1)
Expand Down
2 changes: 1 addition & 1 deletion test/crlf.test.js
@@ -1,7 +1,7 @@
'use strict'

const test = require('tap').test
const _prettyFactory = require('../')
const _prettyFactory = require('../').prettyFactory

function prettyFactory (opts) {
if (!opts) {
Expand Down
2 changes: 1 addition & 1 deletion test/error-objects.test.js
Expand Up @@ -5,7 +5,7 @@ const os = require('os')
const test = require('tap').test
const pino = require('pino')
const serializers = pino.stdSerializers
const _prettyFactory = require('../')
const _prettyFactory = require('../').prettyFactory

function prettyFactory (opts) {
if (!opts) {
Expand Down

0 comments on commit 262dbd6

Please sign in to comment.