js-hub / utils /sha256-node.ts
coyotte508's picture
coyotte508 HF Staff
Add 1 files
21dd449 verified
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");
}