# level-read-stream

> Read from an abstract-level database using Node.js streams

Latest version **2.0.0** (published 2024-12-20) · MIT license · 0 weekly downloads

## Install

```sh
npm install level-read-stream
pnpm add level-read-stream
yarn add level-read-stream
bun add level-read-stream
```

## Health

**Score 45/100 (D)** — status: stable.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: stale.

## Facts

| | |
|---|---|
| Version | 2.0.0 |
| Published | 2024-12-20 |
| First published | 2021-12-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=18 |
| Dependencies | 1 |
| Unpacked size | 15.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 7 |
| Maintainers | vweevers |
| Keywords | level, stream, abstract-level |

## Links

- npm: https://www.npmjs.com/package/level-read-stream
- Repository: https://github.com/Level/read-stream
- Issues: https://github.com/Level/read-stream/issues
- npm.io page: https://npm.io/package/level-read-stream

## Dependencies (1)

- [readable-stream](https://npm.io/package/readable-stream.md) ^4.6.0

## Alternatives

- [byte-size](https://npm.io/package/byte-size.md) — 2.1M weekly downloads
- [speed-limiter](https://npm.io/package/speed-limiter.md) — 16.0K weekly downloads
- [@powersync/node](https://npm.io/package/@powersync/node.md) — 10.9K weekly downloads
- [@ledgerhq/coin-cardano](https://npm.io/package/@ledgerhq/coin-cardano.md) — 1.0K weekly downloads
- [@jayesol/jayeson.lib.streamfinder](https://npm.io/package/@jayesol/jayeson.lib.streamfinder.md) — 1.0K weekly downloads

## Recent versions

- 2.0.0 (latest) — 2024-12-20
- 1.1.1 — 2024-10-22
- 1.1.0 — 2022-02-19
- 1.0.1 — 2022-01-30
- 1.0.0 — 2021-12-10

## 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

---
_Source: https://npm.io/package/level-read-stream · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
