Spaces:
Sleeping
Sleeping
File size: 2,406 Bytes
0865492 | 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | # @huggingface/blake3-jit
Temporary fork of [`blake3-jit`](https://github.com/Brooooooklyn/blake3-jit) by [@Brooooooklyn](https://github.com/Brooooooklyn) with performance enhancements for [Hugging Face Xet](https://huggingface.co/docs/hub/xet) content-defined chunking.
This package will be deprecated once upstream `blake3-jit` exposes these changes.
## Changes from upstream
1. **`Hasher.reset()` method** — resets the hasher to process a new message with the same key/flags, reusing all internal buffers (zero allocations per hash).
2. **Pre-allocated internal buffers** — `parentBlock`, `parentCv`, `chunkCv`, `outWords`, and `finalizeCv` are allocated once in the constructor and reused across `update`/`finalize` calls, significantly reducing GC pressure in hot loops.
3. **`ChunkState.resetTo()` method** — allows reusing `ChunkState` instances instead of allocating new ones per chunk.
4. **Removed `Uint32Array` view fast-path** in `ChunkState.update` — the byte-by-byte `readLittleEndianWordsFull` path was empirically faster and avoids `RangeError` on unaligned offsets.
5. **Dual ESM/CJS output via `tshy`** — the upstream package is ESM-only; this fork uses [`tshy`](https://github.com/isaacs/tshy) to produce both ESM and CommonJS builds, required for compatibility with Node.js CJS consumers.
These changes are also available as a patch file at [`packages/xetchunk-wasm/patches/blake3-jit.patch`](../xetchunk-wasm/patches/blake3-jit.patch) (applicable to the upstream dist bundle).
## Installation
```bash
npm install @huggingface/blake3-jit
```
## Usage
```typescript
import { hash, Hasher } from "@huggingface/blake3-jit";
// One-shot hashing
const digest = hash(new Uint8Array([1, 2, 3]));
// Incremental hashing with reset (zero-alloc reuse)
const hasher = new Hasher();
hasher.update(chunk1);
const hash1 = hasher.finalize();
hasher.reset();
hasher.update(chunk2);
const hash2 = hasher.finalize();
// Keyed hashing (MAC)
const mac = Hasher.newKeyed(key).update(message).finalize();
```
## Upstream
This is a fork of [blake3-jit](https://github.com/Brooooooklyn/blake3-jit) — a high-performance BLAKE3 implementation with runtime JIT WASM SIMD, created by [LongYinan (@Brooooooklyn)](https://github.com/Brooooooklyn).
See the upstream repository for full documentation, benchmarks, and architecture details.
## License
MIT — see [LICENSE](./LICENSE)
|