123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /**
- * 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;
|