aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/lib/getObjStructure.js
blob: 3db389507b44a76fc686dcdf66797000c24e1514 (plain) (blame)
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
const clone = require('clone')

module.exports = getObjStructure

// This will create an object that represents the structure of the given object
// it replaces all values with the result of their type

// {
//   "data": {
//     "CurrencyController": {
//       "conversionDate": "number",
//       "conversionRate": "number",
//       "currentCurrency": "string"
//     }
// }

function getObjStructure(obj) {
  const structure = clone(obj)
  return deepMap(structure, (value) => {
    return value === null ? 'null' : typeof value
  })
}

function deepMap(target = {}, visit) {
  Object.entries(target).forEach(([key, value]) => {
    if (typeof value === 'object' && value !== null) {
      target[key] = deepMap(value, visit)
    } else {
      target[key] = visit(value)
    }
  })
  return target
}