all-terrain-hash
All Terrain Object Hashing.
Hash any javascript object, functions, undefined, warts and all. This utility takes any javascript object and hashes it in a reproducible deterministic way. Functions are decomposed into an AST, with comments and whitespace discarded. Objects are ordered in a consistent and safe way. It even takes into account the difference between an undefined
and a null
.
Why?
Sometimes you need to know when anything is different. For instance, if you are handling code across distributed services, or doing stuff that git should be responsible for ;)
Usage
const ath = let exampleObject = { return "Why, how nice this all is today. I hope we do not get crushed into a hash string." } this "question": "Have you seen my mirror?": "response": "Why yes, I have, let me get it for you."exampleObjectquestionresponsemirror = exampleObject ath// 'ab1934e351c6a2e99ab84e18eef04bfc2963896e4a75a76a99af84e7a00be6738d9f2f35b9aa322f5f4a1d7f82a037ee082658af08708e2175a4b63539f280f0' // Uint8Array // Blake2b { digestLength: 64, finalized: false, pointer: 64 }
API
ath(obj, [key], [salt], [personal])
This takes an ordinary object and will deterministically hash it via blake2b. It returns a Uint8Array by default. All optionals arguments such as key, salt, and personal will be passed to blake2b.
.hex(obj, [key], [salt], [personal])
This takes an ordinary object and will deterministically hash it via blake2b. Unlike the function above, it returns it as a hex string. All optionals arguments such as key, salt, and personal will be passed to blake2b.
Installation
$ npm install all-terrain-hash