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

@arcjet/body

v1.0.0

Published

Arcjet utilities for extracting the body from a stream

Readme

@arcjet/body

Arcjet utilities for getting the body from a stream.

What is this?

This is an internal utility to help us read streams from various frameworks. It’s in part a fork of stream-utils/raw-body. We chose to fork so that we can cut away functionality that we do not use and keep our dependency tree as light as possible. Specifically it always parses the stream as a UTF-8 string instead of a Buffer and only supports promises instead of callbacks.

When should I use this?

You should not use this but use stream-utils/raw-body or one of the alternatives instead. This package matches our current needs which are likely different from yours.

Install

This package is ESM only. Install with npm in Node.js:

npm install @arcjet/body

Use

import fs from "node:fs";
import { readBody } from "@arcjet/body";

const body = await readBody(fs.createReadStream("example.ts"), { limit: 1024 });
console.log(body);

API

This package exports the identifiers readBodyWeb and readBody. There is no default export.

This package exports the TypeScript types ReadBodyOpts and ReadableStreamLike.

ReadBodyOpts

Configuration (TypeScript type).

Fields
  • expectedLength (number, optional) — length of the stream in bytes; rejects an error if the contents of the stream do not add up to this length; useful when the exact size is known
  • limit (number, required) — limit of the body in bytes; rejects an error if the body ends up being larger than this limit; used to prevent reading too much data from malicious clients.

ReadableStreamLike

Minimal Node.js stream interface (TypeScript type).

interface ReadableStreamLike {
  on?: EventHandlerLike | null | undefined;
  readable?: boolean | null | undefined;
  removeListener?: EventHandlerLike | null | undefined;
}

readBodyWeb(stream, options)

Read the body of a web stream.

Parameters
  • stream (ReadableStream) — stream
  • options (ReadBodyOpts, required) — configuration
Returns

Promise that resolves to a concatenated body (Promise<string>).

readBody(stream, options)

Read the body of a Node.js stream.

Parameters
  • stream (ReadableStream) — stream
  • options (ReadBodyOpts, required) — configuration
Returns

Promise that resolves to a concatenated body (Promise<string>).

License

Apache License, Version 2.0 © Arcjet Labs, Inc.

Derivative work based on raw-body licensed under MIT © Jonathan Ong and Douglas Christopher Wilson. Our work removes features that we do not use: no buffers, no sync interface. It adds a version for web streams.