Skip to content

Replacements for stream-buffers

Utility Consumers (native, Node.js)

Since Node.js ≥ 16.7.0 Utility Consumers let you consume a Readable stream fully into memory (Buffer/string/JSON/Blob/ArrayBuffer).

Example:

ts
import streamBuffers from 'stream-buffers'
import { pipeline } from 'node:stream/promises'
import { buffer } from 'node:stream/consumers'

const sink = new streamBuffers.WritableStreamBuffer() 
await pipeline(readable, sink) 

const out = sink.getContents() 
const out = await buffer(readable) 

Capturing output when an API expects a Writable example:

ts
import streamBuffers from 'stream-buffers'
import { PassThrough } from 'node:stream'
import { buffer, text } from 'node:stream/consumers'

const sink = new streamBuffers.WritableStreamBuffer() 
const sink = new PassThrough() 

const outPromise = buffer(sink) 
await someFnThatWritesTo(sink)
const out = sink.getContents() 
sink.end() 
const out = await outPromise 

Push data over time example:

ts
import streamBuffers from 'stream-buffers'
import { Readable } from 'node:stream'

const rs = new streamBuffers.ReadableStreamBuffer() 
const rs = new Readable({ read() {} }) 

rs.put('first chunk') 
rs.push('first chunk') 

rs.put(Buffer.from('second chunk')) 
rs.push(Buffer.from('second chunk')) 

rs.stop() 
rs.push(null) 

Control chunk size and frequency example:

ts
import streamBuffers from 'stream-buffers'
import { Readable } from 'node:stream'
import { setTimeout } from 'node:timers/promises'

const data = Buffer.from('...your data...')
const frequencyMs = 10
const chunkSize = 2048

const rs = new streamBuffers.ReadableStreamBuffer({ frequency: frequencyMs, chunkSize: chunkSize }) 
rs.put(data) 
rs.stop() 

const rs = Readable.from(async function* () { 
  for (let i = 0; i < data.length; i += chunkSize) { 
    yield data.slice(i, i + chunkSize) 
    await setTimeout(frequencyMs) 
  } 
}()) 

Released under the MIT License. (65e83b3b)