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 🙏

© 2026 – Pkg Stats / Ryan Hefner

dubc-ds-iterables

v1.0.0

Published

Utility functions for iterables.

Downloads

265

Readme

dubc-ds-iterables

A library of utility functions for iterables.

Functions

filter

Filters an iterable with a predicate function.

In this example, the set is filtered for even numbers:

const set = new Set([1, 2, 3, 4])
filter(set, x => x % 2 === 0)

Note that unlike Array.filter, the return of this module's filter function is an iterable; no additional storage is allocated. Changes to the given iterable will be reflected in the returned iterable.

first

Returns the first element in an iterable.

const set = new Set([100, 200, 300])
first(set) // 100

const empty = new Set([])
first(empty) // undefined

has

Returns true if the iterable has the given element.

const i = map(new Set([1, 2, 3]), x => String(x))
has(i, "2") // true
has(i, "4") // false

iterable

Converts a generator function into an iterable.

Generator functions already implement the Iterable interface, but that iterable can only be used once:

*function seq() {
  for (let i = 0; i < 4; i++) yield i
}

const i:Iterable<number> = seq()
[...i] // [0, 1, 2, 3]
[...i] // [] /* it was only usable once! */

const i2 = iterable(seq)
[...i2] // [0, 1, 2, 3]
[...i2] // [0, 1, 2, 3]  /* usable multiple times! */

map

Maps an interable over a function.

This examples converts the set of integers into an iterable of strings:

const set = new Set([1, 2, 3])
const m = map(set, x => String(x))
[...m] // ["1", "2", "3"]

last

Returns the first element in an iterable.

const set = new Set([100, 200, 300])
last(set) // 300

const empty = new Set([])
last(empty) // undefined

map

Note that unlike Array.map, the return of this module's map function is an iterable; no additional storage is allocated. Changes to the given iterable will be reflected in the returned iterable.

only

Returns the only element of an iterable. Throws an error if the iterable doesn't have exactly one element.

const set = new Set([100, 200, 300])
only(set) // Error: more than one element

const empty = new Set([])
only(empty) // Error: no elements

const one = new Set([100])
only(one) // 100

reduce

Reduces an iterable to a single value. This is similar to Array.reduce, it just works on arbitrary iterables instead of only arrays.

const set = new Set([1, 2, 3, 4])
const sum = reduce(set, 0, (a,x) => a + x) // 10