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 🙏

© 2025 – Pkg Stats / Ryan Hefner

rainboom

v1.1.0

Published

Amicable iteration

Readme

Rainboom

Iteration library.

standard

Constants

Generators

  • range: Range of values from .start to .end inclusive
  • ind: Range of values from 0 inclusive to .count exclusive
  • fibonacci: Fibonacci sequence starting with 0 then 1
  • prime: Prime number
  • factors: Prime factors of .input in order of size
  • exponent: Value where each value is .func(last) starting with .start
  • single: just .val
  • constant: .val repeated forever
  • entries: Object.entries of .obj
  • values: Object.values of .obj
  • keys: Object.entries of .obj
  • fromArray: Converts values in .arr into iterable, if .arr is not an array, equivalent to [.arr]

Reducers

  • reduce: Reduce sequence with .func starting with .start
  • first: First value in sequence
  • every: True if every value in sequence passes .test
  • some: True if some values in sequence pass .test
  • nth: .pos value in sequence, otherwise undefined
  • biggest: Biggest value in sequence, can compare by function
  • smallest: Smallest value in sequence, can compare by function
  • sum: Sum of values in sequence
  • toArray: Values as array
  • toSet: Values as set
  • toString: Values as string, joined with .del
  • last: Last value in sequence
  • head: Alias of first
  • toObject: Sequence converted to entries in object
  • has: True if sequence has all passed values
  • hasOnly: True if sequence has only passed values
  • hasAny: True if sequence has any of passed values
  • find: Returns first value in sequence to pass .test
  • fallback: Exectute .func on sequence, return .fb if .func return undefined, otherwise return result
  • forEach: Exectute .func with each value in sequence, return undefined
  • eat: Calculate sequence, return undefined
  • size: Length of sequence

transformers

  • concat: Push .newVal to end of sequence
  • contain: Execute .func with source and supplant with result
  • drop: Exclude first .count items
  • dup: Convert to sequence where each value is source
  • filter: Exclude value that fail .test
  • flatten: If value is iterable iterate through and return
  • init: All but last value
  • inject: Execute .func for each value, does not modify sequence
  • layer: When value is undefined take corresponding value from .source
  • log: Log each value in sequence
  • map: Apply .func to each value
  • merge: All combination of source and .iter values
  • padEnd: Append .scalar to sequence .count times
  • padStart: Prepend .scalar to sequence .count times
  • pourIn: When value is undefined take one value from .source
  • prepend: Push .newVal to start of sequence
  • push: Add .newVal to end of sequence
  • repeat: Loop sequence
  • replace: If value is .from return .too
  • slice: value at .start to value at .end
  • snip: Values up to and excluding first to fail test
  • snipStart: Values starting from first to fail .test
  • supplant: Replace current source with .iter
  • tail: All but first value
  • take: Take .num values from sequence
  • zip: One value from each .iterable and source into array