npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

lomstream

v1.1.1

Published

limit, offset, marker stream

Downloads

8,352

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 and 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 and 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.