/** * utilities for hashing config objects. * basically iteratively updates hash with a JSON-like format */ "use strict" exports.__esModule = true const createHash = require('crypto').createHash const stringify = JSON.stringify function hashify(value, hash) { if (!hash) hash = createHash('sha256') if (value instanceof Array) { hashArray(value, hash) } else if (value instanceof Object) { hashObject(value, hash) } else { hash.update(stringify(value) || 'undefined') } return hash } exports.default = hashify function hashArray(array, hash) { if (!hash) hash = createHash('sha256') hash.update('[') for (let i = 0; i < array.length; i++) { hashify(array[i], hash) hash.update(',') } hash.update(']') return hash } hashify.array = hashArray exports.hashArray = hashArray function hashObject(object, hash) { if (!hash) hash = createHash('sha256') hash.update("{") Object.keys(object).sort().forEach(key => { hash.update(stringify(key)) hash.update(':') hashify(object[key], hash) hash.update(",") }) hash.update('}') return hash } hashify.object = hashObject exports.hashObject = hashObject