Skip to content

alanshaw/async-iterator-to-pull-stream

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

async-iterator-to-pull-stream

Build Status dependencies Status

Convert a (async) iterator to a pull stream

Install

npm install async-iterator-to-pull-stream

Usage

const pull = require('pull-stream')
const toPull = require('async-iterator-to-pull-stream')

const source = (async function * () {
  const sourceValues = [1, 2, 3, 4, 5]
  for (let i = 0; i < sourceValues.length; i++) {
    yield await new Promise(resolve => setTimeout(() => resolve(sourceValues[i])))
  }
})()

pull(
  toPull.source(source),
  pull.collect((err, values) => {
    console.log(values) // 1, 2, 3, 4, 5
  })
)

API

toPull.source(iterator)

Convert an async iterator into a source pull stream. Returns a pull stream that can be used as a source in a pull pipeline.

toPull.transform(transform)

A transform is a function that takes an iterable to read from, and returns an iterable that yields (possibly mutated) data. e.g.

const toPull = require('async-iterator-to-pull-stream')
const pull = require('pull-stream')

// A "pass through stream" that reads from the `source` iterable and returns an
// iterable (a generator in this case) that yields the same data.
const passThrough = source => (async function * () {
  for await (const chunk of source) {
    yield chunk // here we _could_ change the chunk or buffer it or whatever
  }
})()

pull(
  pull.values([1, 2, 3]),
  toPull.transform(passThrough),
  pull.collect((err, chunks) => {
    console.log(err, chunks) // logs: undefined, [1, 2, 3]
  })
)

toPull.sink(sink)

Convert a sink to a pull stream sink. A sink is a function that takes an async iterable and consumes some/all of it.

const toPull = require('async-iterator-to-pull-stream')
const pull = require('pull-stream')

pull(
  pull.values([1, 2, 3]),
  toPull.sink(async source => {
    for await (const value of source) {
      console.log(value) // logs: 1 then 2 then 3
    }
  })
)

toPull.duplex(duplex)

Convert a duplex to a pull stream duplex. A duplex is just an object with two properties, sink (a function that takes an async iterable) and source (an async iterable).

Contribute

Feel free to dive in! Open an issue or submit PRs.

License

MIT © Alan Shaw

About

Convert a (async) iterator to a pull stream

Resources

License

Stars

Watchers

Forks

Packages

No packages published