An ECMAScript module to get the non-cryptographic hash of the data with algorithm Fowler-Noll-Vo (FNV).
- Support bits size of 32, 64, 128, 256, 512, and 1024.
- Support variants of 0, 1, and 1a.
| Runtime \ Source | GitHub Raw | JSR | NPM |
|---|---|---|---|
| Bun >= v1.1.0 | ❌ | ✔️ | ✔️ |
| Deno >= v2.1.0 | ✔️ | ✔️ | ✔️ |
| NodeJS >= v20.9.0 | ❌ | ✔️ | ✔️ |
This does not request any runtime permission.
- GitHub Raw
https://raw.githubusercontent.com/hugoalh/fnv-es/{Tag}/mod.ts - JSR
jsr:@hugoalh/fnv[@{Tag}] - NPM
npm:@hugoalh/fnv[@{Tag}]
Note
- It is recommended to include tag for immutability.
- These are not part of the public APIs hence should not be used:
- Benchmark/Test file (e.g.:
example.bench.ts,example.test.ts). - Entrypoint name or path include any underscore prefix (e.g.:
_example.ts,foo/_example.ts). - Identifier/Namespace/Symbol include any underscore prefix (e.g.:
_example,Foo._example).
- Benchmark/Test file (e.g.:
| Name | Path | Description |
|---|---|---|
. |
./mod.ts |
Default. |
./0 |
./0.ts |
Variant of 0. |
./1 |
./1.ts |
Variant of 1. |
./1a |
./1a.ts |
Variant of 1a. |
./base |
./base.ts |
Base of FNV. |
-
class FNV { constructor(variant: FNVVariant, size: FNVBitsSize, data?: FNVAcceptDataType); get freezed(): boolean; get size(): FNVBitsSize; get variant(): FNVVariant; freeze(): this; hash(): Uint8Array; hashHex(): string; update(data: FNVAcceptDataType): this; updateFromStream(stream: ReadableStream<FNVAcceptDataType>): Promise<this>; }
-
class FNV0 extends FNV { constructor(size: FNVBitsSize, data?: FNVAcceptDataType); }
-
class FNV1 extends FNV { constructor(size: FNVBitsSize, data?: FNVAcceptDataType); }
-
class FNV1a extends FNV { constructor(size: FNVBitsSize, data?: FNVAcceptDataType); }
-
type FNVAcceptDataType = | string | Uint8Array | Uint16Array | Uint32Array;
-
type FNVBitsSize = | 32 | 64 | 128 | 256 | 512 | 1024;
-
type FNVVariant = | "0" | "1" | "1a";
Note
- For the full or prettier documentation, can visit via:
-
new FNV1a(32, "hello").hashHex(); //=> "4F9F2CAB"