https://github.com/level/read-stream
Read from an abstract-level database using Node.js streams.
https://github.com/level/read-stream
level nodejs streams
Last synced: 4 months ago
JSON representation
Read from an abstract-level database using Node.js streams.
- Host: GitHub
- URL: https://github.com/level/read-stream
- Owner: Level
- License: mit
- Created: 2021-12-10T22:02:58.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2025-10-01T07:53:56.000Z (4 months ago)
- Last Synced: 2025-10-01T09:35:39.098Z (4 months ago)
- Topics: level, nodejs, streams
- Language: JavaScript
- Homepage:
- Size: 108 KB
- Stars: 6
- Watchers: 5
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# level-read-stream
**Read from an [`abstract-level`](https://github.com/Level/abstract-level) database using Node.js streams.**
> :pushpin: To instead consume data using Web Streams, see [`level-web-stream`](https://github.com/Level/web-stream).
[![level badge][level-badge]](https://github.com/Level/awesome)
[](https://www.npmjs.com/package/level-read-stream)
[](https://www.npmjs.com/package/level-read-stream)
[](https://github.com/Level/read-stream/actions/workflows/test.yml)
[](https://codecov.io/gh/Level/read-stream)
[](https://standardjs.com)
[](https://common-changelog.org)
[](https://opencollective.com/level)
## Usage
_If you are migrating from `levelup` or `level <= 7`: please see [UPGRADING.md](UPGRADING.md)._
```js
const { EntryStream } = require('level-read-stream')
const { Writable, pipeline } = require('readable-stream')
await db.put('a', '1')
await db.put('b', '2')
await db.put('c', '3')
const src = new EntryStream(db, {
gte: 'b'
})
const dst = new Writable({
write (entry, _, next) {
console.log('%s: %s', entry.key, entry.value)
next()
}
})
pipeline(src, dst)
```
Yields:
```
b: 2
c: 3
```
To only read keys or values rather than entries:
```js
const { KeyStream, ValueStream } = require('level-read-stream')
pipeline(new KeyStream(db), new Writable({
write (key, _, next) {
console.log(key)
next()
}
}))
```
## Install
With [npm](https://npmjs.org) do:
```
npm install level-read-stream
```
Usage from TypeScript also requires `npm install @types/readable-stream`.
## API
### `stream = new EntryStream(db[, options])`
Create a readable stream that will yield entries. An entry is an object 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`.
Upon stream end or having called `stream.destroy()` the underlying iterator will be closed after which a `close` event is emitted on the stream.
### `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.
### `stream`
An instance of `EntryStream`, `KeyStream` or `ValueStream` has the following special properties.
#### `stream.db`
A read-only reference to the database that this stream is reading from.
## Contributing
[`Level/read-stream`](https://github.com/Level/read-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](https://github.com/Level/community/blob/master/CONTRIBUTING.md) for more details.
## Donate
Support us with a monthly donation on [Open Collective](https://opencollective.com/level) and help us continue our work.
## License
[MIT](LICENSE)
[level-badge]: https://leveljs.org/img/badge.svg