Sha256: c6b476b255c0f6c4e4af3dd4aa2a948b675de71d1e0eaa6dd8504fcb8301a184

Contents?: true

Size: 1.15 KB

Versions: 44

Compression:

Stored size: 1.15 KB

Contents

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


Version data entries

44 entries across 44 versions & 2 rubygems

Version Path
govuk_publishing_components-16.19.0 node_modules/eslint-module-utils/hash.js
govuk_publishing_components-16.18.0 node_modules/eslint-module-utils/hash.js
govuk_publishing_components-16.17.0 node_modules/eslint-module-utils/hash.js
lanes-0.8.0 node_modules/eslint-module-utils/hash.js