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

web-streams-utils

v0.3.0

Published

Utility functions for Web Streams

Readme

Web streams utils

A TypeScript library providing utility functions for working with the Web Stream API.

Installation

npm install web-streams-utils

Features

  • Fully typed with TypeScript
  • Zero dependencies
  • Works in both Node.js and browsers
  • Provides common stream operations like map, filter, tap, etc.
  • Compatible with the standard Web Streams API
  • Supports both ESM and CommonJS imports

Usage

ESM (ECMAScript Modules)

import { fromIterable, map, filter, toArray } from 'web-streams-utils'

async function example() {
  const inputData = [1, 2, 3, 4, 5]

  const stream = fromIterable(inputData)
    .pipeThrough(filter(n => n % 2 === 0)) // Keep even numbers
    .pipeThrough(map(n => n * 2)) // Double each number

  const result = await toArray(stream)
  console.log(result) // [4, 8]
}

example()

CommonJS

const { fromIterable, map, filter, toArray } = require('web-streams-utils')

async function example() {
  const inputData = [1, 2, 3, 4, 5]

  const stream = fromIterable(inputData)
    .pipeThrough(filter(n => n % 2 === 0))
    .pipeThrough(map(n => n * 2))

  const result = await toArray(stream)
  console.log(result) // [4, 8]
}

example()

API Reference

Transformation Functions

  • map<T, R>(fn: (chunk: T) => R | Promise<R>): TransformStream<T, R>
  • filter<T>(predicate: (chunk: T) => boolean | Promise<boolean>): TransformStream<T, T>
  • tap<T>(fn: (chunk: T) => void | Promise<void>): TransformStream<T, T>
  • batch<T>(size: number): TransformStream<T, T[]>
  • flatten<T>(): TransformStream<T[], T>
  • take<T>(limit: number): TransformStream<T, T>
  • skip<T>(count: number): TransformStream<T, T>
  • scan<T, R>(scanner: (accumulator: R, chunk: T) => R | Promise<R>, initialValue: R): TransformStream<T, R>
  • compact<T>(): TransformStream<T, NonNullable<T>>
  • flatMap<T, R>(fn: (chunk: T) => R[] | Promise<R[]>): TransformStream<T, R>
  • reduce<T>(reducer: (accumulator: T, chunk: T) => T | Promise<T>): TransformStream<T, T>

Stream Creation

  • fromIterable<T>(iterable: Iterable<T> | AsyncIterable<T>): ReadableStream<T>
  • interval(period: number): ReadableStream<number>

Stream Combination

  • merge<T>(...streams: ReadableStream<T>[]): ReadableStream<T>

Consumption

  • toArray<T>(stream: ReadableStream<T>): Promise<T[]>

Documentation

The complete API documentation is available at https://falinor.github.io/web-streams-utils/.

You can also generate the documentation locally:

yarn docs

The documentation will be available in the docs/ directory.

Development

Setup

corepack enable
yarn install

Testing

yarn test
yarn test:watch
yarn test:coverage

Formatting

yarn format

Committing Changes

This project uses Conventional Commits for commit messages. You can use the following command to create a commit:

yarn commit

Releasing

This project uses semantic-release for automated versioning and releases. Releases are automatically triggered by GitHub Actions when changes are pushed to the main branch. The workflow will:

  1. Analyze commit messages to determine the next version
  2. Generate release notes
  3. Update the CHANGELOG.md
  4. Publish to npm
  5. Create a GitHub release
  6. Deploy documentation to GitHub Pages

The release process requires the following GitHub secrets to be set:

  • GITHUB_TOKEN: Automatically provided by GitHub Actions
  • NPM_TOKEN: Your npm authentication token with publish permissions

Browser Support

This library supports all modern browsers and Node.js 16+. It uses the Web Streams API, which is available in all modern browsers and Node.js.

License

MIT