File size: 746 Bytes
21dd449 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import { Readable } from "node:stream";
import type { ReadableStream } from "node:stream/web";
import { createHash } from "node:crypto";
export async function* sha256Node(
buffer: ArrayBuffer | Blob,
opts?: {
abortSignal?: AbortSignal;
}
): AsyncGenerator<number, string> {
const sha256Stream = createHash("sha256");
const size = buffer instanceof Blob ? buffer.size : buffer.byteLength;
let done = 0;
const readable =
buffer instanceof Blob ? Readable.fromWeb(buffer.stream() as ReadableStream) : Readable.from(Buffer.from(buffer));
for await (const buffer of readable) {
sha256Stream.update(buffer);
done += buffer.length;
yield done / size;
opts?.abortSignal?.throwIfAborted();
}
return sha256Stream.digest("hex");
}
|