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 = require('all-terrain-hash')
let exampleObject = {
"I've got a nice long key name": function withAFunction (a, b, c=3) {
return "Why, how nice this all is today. I hope we do not get crushed into a hash string."
},
"Sure we won't": (world)=>this,
"question": {"Have you seen my mirror?": {"response": "Why yes, I have, let me get it for you."}}
}
exampleObject.question.response.mirror = exampleObject
ath.hex(exampleObject)
ath(exampleObject)
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
License
MIT