https://github.com/hugoalh/fnv-es
An ES (JavaScript & TypeScript) module to get the non-cryptographic hash of the data with algorithm Fowler-Noll-Vo (FNV).
https://github.com/hugoalh/fnv-es
es fnv fowler-noll-vo hash javascript js modulejs ts typescript
Last synced: 3 months ago
JSON representation
An ES (JavaScript & TypeScript) module to get the non-cryptographic hash of the data with algorithm Fowler-Noll-Vo (FNV).
- Host: GitHub
- URL: https://github.com/hugoalh/fnv-es
- Owner: hugoalh
- License: other
- Created: 2025-01-17T06:53:54.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-08T10:21:45.000Z (about 1 year ago)
- Last Synced: 2025-04-12T19:43:32.063Z (about 1 year ago)
- Topics: es, fnv, fowler-noll-vo, hash, javascript, js, modulejs, ts, typescript
- Language: TypeScript
- Homepage:
- Size: 43 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
- Citation: CITATION.cff
- Codeowners: .github/CODEOWNERS
- Security: SECURITY.md
Awesome Lists containing this project
README
# Fowler-Noll-Vo (FNV) (ES)
[**⚖️** MIT](./LICENSE.md)
[](https://github.com/hugoalh/fnv-es)
[](https://jsr.io/@hugoalh/fnv)
[](https://www.npmjs.com/package/@hugoalh/fnv)
An ECMAScript module to get the non-cryptographic hash of the data with algorithm Fowler-Noll-Vo (FNV).
## 🌟 Features
- Support bits size of 32, 64, 128, 256, 512, and 1024.
- Support variants of 0, 1, and 1a.
## 🎯 Targets
| **Runtime \\ Source** | **GitHub Raw** | **JSR** | **NPM** |
|:--|:-:|:-:|:-:|
| **[Bun](https://bun.sh/)** >= v1.1.0 | ❌ | ✔️ | ✔️ |
| **[Deno](https://deno.land/)** >= v2.1.0 | ✔️ | ✔️ | ✔️ |
| **[NodeJS](https://nodejs.org/)** >= v20.9.0 | ❌ | ✔️ | ✔️ |
## 🛡️ Runtime Permissions
This does not request any runtime permission.
## #️⃣ Sources
- 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`).
## ⤵️ Entrypoints
| **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. |
## 🧩 APIs
- ```ts
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): Promise;
}
```
- ```ts
class FNV0 extends FNV {
constructor(size: FNVBitsSize, data?: FNVAcceptDataType);
}
```
- ```ts
class FNV1 extends FNV {
constructor(size: FNVBitsSize, data?: FNVAcceptDataType);
}
```
- ```ts
class FNV1a extends FNV {
constructor(size: FNVBitsSize, data?: FNVAcceptDataType);
}
```
- ```ts
type FNVAcceptDataType =
| string
| Uint8Array
| Uint16Array
| Uint32Array;
```
- ```ts
type FNVBitsSize =
| 32
| 64
| 128
| 256
| 512
| 1024;
```
- ```ts
type FNVVariant =
| "0"
| "1"
| "1a";
```
> [!NOTE]
> - For the full or prettier documentation, can visit via:
> - [Deno CLI `deno doc`](https://docs.deno.com/runtime/reference/cli/doc/)
> - [JSR](https://jsr.io/@hugoalh/fnv)
## ✍️ Examples
- ```ts
new FNV1a(32, "hello").hashHex();
//=> "4F9F2CAB"
```