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


