summaryrefslogtreecommitdiff
path: root/deps/npm/lib/utils/set.js
blob: 4d9241aab714d4f09fcfbfa49bae5df451cb4b0d (plain)
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

module.exports = set
var get = require("./get.js")
  , processJson = require("./read-json.js").processJson
function set (obj, key, val) {
  for (var i in obj) {
    if (i.toLowerCase() === key.toLowerCase()) return obj[i] = val
  }
  obj[key] = val
  if (!val) return
  // if it's a package set, then assign all the versions.
  if (val.versions) return Object.keys(val.versions).forEach(function (v) {
    if (typeof val.versions[v] !== "object") return
    set(obj, key+"@"+v, val.versions[v])
  })
  // Note that this doesn't put the dist-tags there, only updates the versions
  if (key === val.name+"@"+val.version) {
    processJson(val)
    var reg = get(obj, val.name) || {}
    reg.name = reg._id = val.name
    set(obj, val.name, reg)
    reg.versions = get(reg, "versions") || {}
    if (!get(reg.versions, val.version)) set(reg.versions, val.version, val)
  }
}