@web-std/blob
Web API compatible Blob for nodejs.
Comparison to Alternatives
The reason this library exists is because fetch-blob chooses to compromise
Web API compatibility of blob.stream()
by useing nodejs
native Readable stream. We found this to be problematic when sharing code
across nodejs and browser rutimes. Instead this library stays true to the
specification by using ReadableStream implementation from [web-streams-polyfill][]
library even if that is less convinient in nodejs context.
Note: Both node Readable streams and web ReadableStream implement
AsyncIterable
intreface and in theory either could be used with for await
loops. In practice however major browsers do not yet ship AsyncIterable
support for ReadableStreams wich in our experience makes choice made by
[node-fetch][] impractical.
fetch-blob is build around node Buffers. This implementation is built
around standard [Uint8Array][]s.
fetch-blob chooses to use WeakMaps for encapsulating private state. This
library chooses to use to use properties with names that start with _
. While
those properties aren't truly private they do have better performance profile
and make it possible to interop with this library, which we found impossible
to do with [node-fetch][].
Usage
import { Blob } from "@web-std/blob"
const blob = new Blob(["hello", new TextEncoder().encode("world")])
for await (const chunk of blob.stream()) {
console.log(chunk)
}
Usage from Typescript
This library makes use of typescript using JSDOC annotations and
also generates type difinitions along with typed definition maps. So you should
be able to get all the type innference out of the box.
Install
npm install @web-std/blob