pino-abstract-transport
Advanced tools
Comparing version 0.3.0 to 0.4.0
@@ -5,2 +5,3 @@ 'use strict' | ||
const split = require('split2') | ||
const duplexify = require('duplexify') | ||
@@ -69,2 +70,6 @@ module.exports = function build (fn, opts = {}) { | ||
res = null | ||
} else if (opts.enablePipelining && res) { | ||
return duplexify(stream, res, { | ||
objectMode: true | ||
}) | ||
} | ||
@@ -71,0 +76,0 @@ |
{ | ||
"name": "pino-abstract-transport", | ||
"version": "0.3.0", | ||
"version": "0.4.0", | ||
"description": "Write Pino transports easily", | ||
@@ -26,2 +26,3 @@ "main": "index.js", | ||
"dependencies": { | ||
"duplexify": "^4.1.2", | ||
"split2": "^3.2.2" | ||
@@ -28,0 +29,0 @@ }, |
@@ -54,2 +54,6 @@ # pino-abstract-transport | ||
If `opts.transform` is `true`, `pino-abstract-transform` will | ||
wrap the split2 instance and the returned stream using [`duplexify`](https://www.npmjs.com/package/duplexify), | ||
so they can be concatenated into multiple transports. | ||
#### Events emitted | ||
@@ -101,4 +105,38 @@ | ||
### Stream concatenation / pipeline | ||
You can pipeline multiple transports: | ||
```js | ||
const build = require('pino-abstract-transport') | ||
const { Transform, pipeline } = require('stream') | ||
function buildTransform () { | ||
return build(function (source) { | ||
return new Transform({ | ||
objectMode: true, | ||
autoDestroy: true, | ||
transform (line, enc, cb) { | ||
line.service = 'bob' | ||
cb(null, JSON.stringify(line)) | ||
} | ||
}) | ||
}, { enablePipelining: true }) | ||
} | ||
function buildDestination () { | ||
return build(function (source) { | ||
source.on('data', function (obj) { | ||
console.log(obj) | ||
}) | ||
}) | ||
} | ||
pipeline(process.stdin, buildTransform(), buildDestination(), function (err) { | ||
console.log('pipeline completed!', err) | ||
}) | ||
``` | ||
## License | ||
MIT |
'use strict' | ||
const { once } = require('events') | ||
const { Transform, pipeline } = require('stream') | ||
@@ -383,1 +384,55 @@ const { test } = require('tap') | ||
}) | ||
test('support Transform streams', ({ same, plan, error }) => { | ||
plan(7) | ||
const expected1 = [{ | ||
level: 30, | ||
time: 1617955768092, | ||
pid: 2942, | ||
hostname: 'MacBook-Pro.local', | ||
msg: 'hello world' | ||
}, { | ||
level: 30, | ||
time: 1617955768092, | ||
pid: 2942, | ||
hostname: 'MacBook-Pro.local', | ||
msg: 'another message', | ||
prop: 42 | ||
}] | ||
const expected2 = [] | ||
const stream1 = build(function (source) { | ||
const transform = new Transform({ | ||
objectMode: true, | ||
autoDestroy: true, | ||
transform (chunk, enc, cb) { | ||
same(expected1.shift(), chunk) | ||
chunk.service = 'from transform' | ||
expected2.push(chunk) | ||
cb(null, JSON.stringify(chunk) + '\n') | ||
} | ||
}) | ||
pipeline(source, transform, () => {}) | ||
return transform | ||
}, { enablePipelining: true }) | ||
const stream2 = build(function (source) { | ||
source.on('data', function (line) { | ||
same(expected2.shift(), line) | ||
}) | ||
}) | ||
pipeline(stream1, stream2, function (err) { | ||
error(err) | ||
same(expected1, []) | ||
same(expected2, []) | ||
}) | ||
const lines = expected1.map(JSON.stringify).join('\n') | ||
stream1.write(lines) | ||
stream1.end() | ||
}) |
Sorry, the diff of this file is not supported yet
18726
447
141
2
+ Addedduplexify@^4.1.2
+ Addedduplexify@4.1.3(transitive)
+ Addedend-of-stream@1.4.4(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedstream-shift@1.0.3(transitive)
+ Addedwrappy@1.0.2(transitive)