stream-to-it
Version:
Convert Node.js streams to streaming iterables
86 lines (84 loc) • 2.39 kB
text/typescript
/**
* @packageDocumentation
*
* Seamlessly use Node.js streams with `it-pipe` and friends.
*
* @example Convert readable stream to source iterable
*
* ```TypeScript
* 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`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream):
*
* ```TypeScript
* 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
*
* ```TypeScript
* 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
*
* ```TypeScript
* 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
*
* - [`it-to-stream`](https://www.npmjs.com/package/it-to-stream) Convert streaming iterables to Node.js streams
* - [`it-pipe`](https://www.npmjs.com/package/it-pipe) Utility to "pipe" async iterables together
*/
export { source } from './source.js'
export { sink } from './sink.js'
export { transform } from './transform.js'
export { duplex } from './duplex.js'