JSPM

  • Created
  • Published
  • Downloads 31040
  • Score
    100M100P100Q152825F
  • License Apache-2.0

Arcjet utilities for extracting the body from a stream

Package Exports

  • @arcjet/body
  • @arcjet/body/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@arcjet/body) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Arcjet Logo

@arcjet/body

npm badge

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.