1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- /**
- * 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 (Array.isArray(value)) {
- 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;
|