Skip to content

Repository files navigation

Fowler-Noll-Vo (FNV) (ES)

⚖️ MIT

🔗 DistBoard @hugoalhGitHubJSRNPM

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.

🎯 Runtime Targets

Any runtime which support ECMAScript should able to use this; These runtimes are officially supported:

🛡️ Runtime Permissions

This does not request any runtime permission.

#️⃣ Entrypoints

Type Name Path Description
API . ./mod.ts Default.
API ./0 ./0.ts Variant of 0.
API ./1 ./1.ts Variant of 1.
API ./1a ./1a.ts Variant of 1a.
API ./base ./base.ts Base of FNV.
CLI ./cli ./cli.ts Default.

Note

  • Different runtimes have vary support for the entrypoints, visit the runtime documentation for more information.
  • 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).

🧩 APIs

  • class FNV {
      constructor(options?: FNVOptions);
      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(options?: Omit<FNVOptions, "variant">);
    }
  • class FNV1 extends FNV {
      constructor(options?: Omit<FNVOptions, "variant">);
    }
  • class FNV1a extends FNV {
      constructor(options?: Omit<FNVOptions, "variant">);
    }
  • interface FNVOptions {
      size?: FNVBitsSize;
      variant?: FNVVariant;
    }
  • type FNVAcceptDataType =
      | string
      | Uint8Array
      | Uint16Array
      | Uint32Array;
  • type FNVBitsSize =
      | 32
      | 64
      | 128
      | 256
      | 512
      | 1024;
  • type FNVVariant =
      | "0"
      | "1"
      | "1a";

Note

🧩 CLIs

  • fnv $Context [--size $Size] [--variant $Variant]
  • fnv --file $FilePath [--size $Size] [--variant $Variant]
  • fnv --stdin [--size $Size] [--variant $Variant]
Argument Type Description
file switch Whether the resource is from file.
size FNVBitsSize = 1024 FNV bits size.
stdin switch Whether the resource is from standard stream input.
variant FNVVariant = "1a" FNV variant.

✍️ Examples

  • new FNV1a({ size: 32 }).update("hello").hashHex();
    //=> "4F9F2CAB"
  • fnv 'hello' --size 32 --variant '1a'

About

An ECMAScript module to get the non-cryptographic hash of the data with algorithm Fowler-Noll-Vo (FNV).

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages