# lomstream

> limit, offset, marker stream

Latest version **1.1.1** (published 2021-11-02) · MIT license · 0 weekly downloads

## Install

```sh
npm install lomstream
pnpm add lomstream
yarn add lomstream
bun add lomstream
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.1 |
| Published | 2021-11-02 |
| First published | 2015-07-31 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 18.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Maintainers | jclulow, rm, bahamat |

## Links

- npm: https://www.npmjs.com/package/lomstream
- Repository: https://github.com/joyent/node-lomstream
- Homepage: https://github.com/joyent/node-lomstream#readme
- Issues: https://github.com/joyent/node-lomstream/issues
- npm.io page: https://npm.io/package/lomstream

## Dependencies (3)

- [vstream](https://npm.io/package/vstream.md) 0.1.0
- [extsprintf](https://npm.io/package/extsprintf.md) 1.3.0
- [assert-plus](https://npm.io/package/assert-plus.md) 0.1.5

## Recent versions

- 1.1.1 (latest) — 2021-11-02
- 1.1.0 — 2015-08-20
- 1.0.0 — 2015-07-31

## README

# node-lomstream: Limit, Offset, Marker Stream

The lomstream is designed to be able to take a paginated resource that
supports either a limit and offset, or a limit and a marker, and takes
care of streaming, buffering, and fetching through the entire set of
paginated results. It's been designed, in particular, for use with
[moray](https://github.com/joyent/moray) and
[SDC](https://github.com/joyent/sdc) APIs.

## Usage

The module exports a single function, a LOMStream constructor, which can
be used to create a new instance of a LOMStream. The constructor takes the following arguments:

```
/*
 * Create a limit, offset, marker stream. We require the following options:
 *
 * fetch	A function that describes how to fetch data. The function will
 * 		be called as fetch(fetcharg, limitObj, datacb, donecb). The
 * 		limitObj will have limit set and one of offset and marker.
 * 		They mean:
 *
 * 			o offset	The offset to use for the request
 * 			o marker	The marker to use for the request
 * 			o limit		The limit to use for the request
 *
 * 		The datacb will be of the form datacb(obj). It should be used if
 * 		there's a single object for which data is available. If an error
 * 		occurs, then datacb() should not be called any additional times
 * 		and instead the donecb should be called with the error.
 *
 * 		The donecb will be of the form of donecb(err, result). The
 * 		result should be an object that has the form of:
 *
 * 			{
 * 				"done": <boolean>
 * 				"results": <array>
 *			}
 *
 *		The done boolean indicates that there will be no more results.
 *		The results array contains an array of items to emit. The type
 *		of the items is not important. The only times that results
 *		should be empty is when done is set to true or if all entries
 *		were pushed via the datacb(), then results may be empty.
 *
 *		The two different modes of passing results are designed to
 *		handle two different modes of clients. Using the data callback
 *		for each item is designed for a fetch() function which streams
 *		results. Where as the latter form is designed for a fetch() that
 *		batches results, eg. a rest API request that returns an array of
 *		limit objects.
 *
 *
 * limit	The maximum number of entries to grab at once.
 *
 * We require one of the following:
 *
 * offset	A boolean set to true to indicate that we should use offsets
 * marker	A function that given an object returns the marker from it.
 *
 * The following arguments are optional:
 *
 * fetcharg	An argument to be passed to the fetching function.
 *
 * streamOptions	Options to pass to the stream constructor
 */
```

## Contributions

Contributions welcome, and should be 'make prepush' clean.  The prepush checks
use [javascriptlint](https://github.com/davepacheco/javascriptlint) and
[jsstyle](https://github.com/davepacheco/jsstyle). All tests exit zero
if succesful. In addition to verifying that the tests still pass, please
consider adding any new relevant tests to cover new functionality,
exposed bugs, or regressions.

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