@esmkit/web-blob
v0.1.0
Published
Web API compatible Blob implementation
Downloads
2
Readme
@esmkit/web-blob
Web API compatible [Blob][] for nodejs.
Comparison to Alternatives
[fetch-blob][]
The reason this library exists is because [fetch-blob][] chooses to compromise
Web API compatibility of [blob.stream()
][w3c blob.stream] by using nodejs
native [Readable][] stream. We found this to be problematic when sharing code
across nodejs and browser runtimes. Instead this library stays true to the
specification by using [ReadableStream][] implementation from [@esmkit/web-stream][]
library even if that is less convenient in nodejs context.
Note: Both node [Readable][] streams and web [ReadableStream][] implement
AsyncIterable
interface and in theory either could be used with [for await][] loops. In practice however major browsers do not yet shipAsyncIterable
support for [ReadableStream][]s which in our experience makes choice made by [node-fetch][] impractical.
[fetch-blob][] is build around node [Buffer][]s. This implementation is built around standard [Uint8Array][]s.
[fetch-blob] chooses to use [WeakMap][]s 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 "@esmkit/web-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][ts-jsdoc] and also generates type definitions along with typed definition maps. So you should be able to get all the type inference out of the box.
Install
npm install @esmkit/web-blob