зеркало из https://github.com/mozilla/gecko-dev.git
37 строки
1.0 KiB
JavaScript
37 строки
1.0 KiB
JavaScript
"use strict";
|
|
|
|
var nil = {}
|
|
var owns = ({}).hasOwnProperty
|
|
|
|
function rebase(result, parent, delta) {
|
|
var key, current, previous, update
|
|
for (key in parent) {
|
|
if (owns.call(parent, key)) {
|
|
previous = parent[key]
|
|
update = owns.call(delta, key) ? delta[key] : nil
|
|
if (previous === null) continue
|
|
else if (previous === void(0)) continue
|
|
else if (update === null) continue
|
|
else if (update === void(0)) continue
|
|
else result[key] = previous
|
|
}
|
|
}
|
|
for (key in delta) {
|
|
if (owns.call(delta, key)) {
|
|
update = delta[key]
|
|
current = owns.call(result, key) ? result[key] : nil
|
|
if (current === update) continue
|
|
else if (update === null) continue
|
|
else if (update === void(0)) continue
|
|
else if (current === nil) result[key] = update
|
|
else if (typeof(update) !== "object") result[key] = update
|
|
else if (typeof(current) !== "object") result[key] = update
|
|
else result[key]= rebase({}, current, update)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
module.exports = rebase
|