An open API service indexing awesome lists of open source software.

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.

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)
[![npm](https://img.shields.io/npm/v/level-read-stream.svg)](https://www.npmjs.com/package/level-read-stream)
[![Node version](https://img.shields.io/node/v/level-read-stream.svg)](https://www.npmjs.com/package/level-read-stream)
[![Test](https://img.shields.io/github/actions/workflow/status/Level/read-stream/test.yml?branch=main\&label=test)](https://github.com/Level/read-stream/actions/workflows/test.yml)
[![Coverage](https://img.shields.io/codecov/c/github/Level/read-stream?label=&logo=codecov&logoColor=fff)](https://codecov.io/gh/Level/read-stream)
[![Standard](https://img.shields.io/badge/standard-informational?logo=javascript&logoColor=fff)](https://standardjs.com)
[![Common Changelog](https://common-changelog.org/badge.svg)](https://common-changelog.org)
[![Donate](https://img.shields.io/badge/donate-orange?logo=open-collective&logoColor=fff)](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