Blame view

node_modules/eslint-module-utils/hash.js 1.15 KB
ce4c83ff   wxy   初始提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  /**
   * 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