You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

26 lines
873 B

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)
}
}