level-web-stream
Read from an abstract-level
database using Web Streams. Compatible with browsers and Node.js.
📌 To instead consume data using Node.js streams, seelevel-read-stream
.
Usage
const { EntryStream } = require('level-web-stream')
const { MemoryLevel } = require('memory-level')
const db = new MemoryLevel()
// Write sample data
await db.put('a', '1')
await db.put('b', '2')
await db.put('c', '3')
// Create a ReadableStream
const src = new EntryStream(db, {
gte: 'b'
})
// Pipe to a stream of choice
const dst = new WritableStream({
write ([key, value]) {
console.log('%s: %s', key, value)
}
})
await src.pipeTo(dst)
Yields:
b: 2
c: 3
To only read keys or values rather than entries:
const { KeyStream, ValueStream } = require('level-web-stream')
await new KeyStream(db).pipeTo(new WritableStream({
write (key) {
console.log(key)
}
}))
Note that WritableStream
is a global in browsers. In Node.js it can be imported from stream/web
.
Install
With npm do:
npm install level-web-stream
API
stream = new EntryStream(db[, options])
Create a ReadableStream
that will yield entries. An entry is an array with key
and value
properties. The db
argument must be an abstract-level
database. The optional options
object may contain:
highWaterMark
(number): the maximum number of entries to buffer internally before ceasing to read further entries. Default 1000.
Any other options are forwarded to db.iterator(options)
. The stream wraps that iterator. If you prefer to consume entries with for await...of
then it's recommended to directly use db.iterator()
. In either case, most databases will read from a snapshot (thus unaffected by simultaneous writes) as indicated by db.supports.snapshots
.
stream = new KeyStream(db[, options])
Same as EntryStream
but yields keys instead of entries, using db.keys()
instead of db.iterator()
. If only keys are needed, using KeyStream
may increase performance because values won't have to be fetched.
stream = new ValueStream(db[, options])
Same as EntryStream
but yields values instead of entries, using db.values()
instead of db.iterator()
. If only values are needed, using ValueStream
may increase performance because keys won't have to be fetched.
Contributing
Level/web-stream
is an OPEN Open Source Project. This means that:
Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.
See the Contribution Guide for more details.