11 | Stream | Description |
13 | `Readable` | Data emitter |
14 | `Writable` | Data receiver |
15 | `Transform` | Emitter and receiver |
16 | `Duplex` | Emitter and receiver (independent) |
18 See: [Stream](https://nodejs.org/api/stream.html#stream_stream) _(nodejs.org)_
23 const Readable = require('stream').Readable
24 const Writable = require('stream').Writable
25 const Transform = require('stream').Transform
31 clock() // Readable stream
32 .pipe(xformer()) // Transform stream
33 .pipe(renderer()) // Writable stream
39 stream.push(/*...*/) // Emit a chunk
40 stream.emit('error', error) // Raise an error
41 stream.push(null) // Close a stream
48 st.on('data', (data) => { console.log('<-', data) })
49 st.on('error', (err) => { console.log('!', err.message) })
50 st.on('close', () => { console.log('** bye') })
51 st.on('finish', () => { console.log('** bye') })
54 Assuming `source()` is a readable stream.
59 // Toggle flowing mode
65 // Automatically turns on flowing mode
66 st.on('data', /*...*/)
77 const stream = new Readable({
83 stream.push({ time: new Date() })
89 // Implement read() if you
90 // need on-demand reading.
93 Readable streams are generators of data. Write data using `stream.push()`.
101 return new Transform({
103 transform: (data, _, done) => {
104 done(null, { ...data, index: count++ })
110 Pass the updated chunk to `done(null, chunk)`.
115 function renderer () {
116 return new Writable({
118 write: (data, _, done) => {
119 console.log('<-', data)
129 clock() // Readable stream
130 .pipe(xformer()) // Transform stream
131 .pipe(renderer()) // Writable stream
137 - <https://nodejs.org/api/stream.html>
138 - <https://github.com/substack/stream-handbook>