paulmillr / noble-hashes

Audited & minimal JS implementation of hash functions, MACs and KDFs.
https://paulmillr.com/noble
MIT License
545 stars 46 forks source link

use const enums #65

Closed jeetiss closed 1 year ago

jeetiss commented 1 year ago

const enums don't have any runtime

// Flag bitset
enum Flags {
  CHUNK_START = 1 << 0,
  CHUNK_END = 1 << 1,
  PARENT = 1 << 2,
  ROOT = 1 << 3,
  KEYED_HASH = 1 << 4,
  DERIVE_KEY_CONTEXT = 1 << 5,
  DERIVE_KEY_MATERIAL = 1 << 6,
}

export const example = [Flags.CHUNK_START, Flags.CHUNK_END]

compiled into:

// Flag bitset
var Flags;
(function (Flags) {
    Flags[Flags["CHUNK_START"] = 1] = "CHUNK_START";
    Flags[Flags["CHUNK_END"] = 2] = "CHUNK_END";
    Flags[Flags["PARENT"] = 4] = "PARENT";
    Flags[Flags["ROOT"] = 8] = "ROOT";
    Flags[Flags["KEYED_HASH"] = 16] = "KEYED_HASH";
    Flags[Flags["DERIVE_KEY_CONTEXT"] = 32] = "DERIVE_KEY_CONTEXT";
    Flags[Flags["DERIVE_KEY_MATERIAL"] = 64] = "DERIVE_KEY_MATERIAL";
})(Flags || (Flags = {}));
export const example = [Flags.CHUNK_START, Flags.CHUNK_END];

to support extending in runtime, when const enums just compiled to single values:

export const example = [1 /* Flags.CHUNK_START */, 2 /* Flags.CHUNK_END */];

this PR should decrease bundle size for entries that use enums