Home

Awesome

stream-to-it

codecov CI

Convert Node.js streams to streaming iterables

About

<!-- !IMPORTANT! Everything in this README between "# About" and "# Install" is automatically generated and will be overwritten the next time the doc generator is run. To make changes to this section, please update the @packageDocumentation section of src/index.js or src/index.ts To experiment with formatting, please run "npm run docs" from the root of this repo and examine the changes made. -->

Seamlessly use Node.js streams with it-pipe and friends.

Example - Convert readable stream to source iterable

import fs from 'node:fs'
import * as toIterable from 'stream-to-it'

const readable = fs.createReadStream('/path/to/file')
// Node.js streams are already async iterable so this is just s => s
const source = toIterable.source<Buffer>(readable)

for await (const chunk of source) {
  console.log(chunk.toString())
}

Also works with browser ReadableStream:

import * as toIterable from 'stream-to-it'

const res = await fetch('http://example.org/file.jpg')

if (res.body == null) {
  throw new Error('Body was not set')
}

for await (const chunk of toIterable.source(res.body)) {
  console.log(chunk.toString())
}

Example - Convert writable stream to sink iterable

import fs from 'node:fs'
import { pipe } from 'it-pipe'
import * as toIterable from 'stream-to-it'

const source = [Buffer.from('Hello '), Buffer.from('World!')]
const sink = toIterable.sink(fs.createWriteStream('/path/to/file'))

await pipe(source, sink)

Example - Convert transform stream to transform iterable

import fs from 'node:fs'
import { Transform } from 'node:stream'
import { pipe } from 'it-pipe'
import * as toIterable from 'stream-to-it'

const output = await pipe(
  [true, false, true, true],
  toIterable.transform(new Transform({ // Inverter transform :)
    transform (chunk, enc, cb) {
      cb(null, !chunk)
    }
  })),
  // Collect and return the chunks
  async source => {
    const chunks = []
    for await (const chunk of source) chunks.push(chunk)
    return chunks
  }
)

console.log(output) // [ false, true, false, false ]

Related

Install

$ npm i stream-to-it

API Docs

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.