1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/addon-sdk/source/lib/diffpatcher/rebase.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,36 @@ 1.4 +"use strict"; 1.5 + 1.6 +var nil = {} 1.7 +var owns = ({}).hasOwnProperty 1.8 + 1.9 +function rebase(result, parent, delta) { 1.10 + var key, current, previous, update 1.11 + for (key in parent) { 1.12 + if (owns.call(parent, key)) { 1.13 + previous = parent[key] 1.14 + update = owns.call(delta, key) ? delta[key] : nil 1.15 + if (previous === null) continue 1.16 + else if (previous === void(0)) continue 1.17 + else if (update === null) continue 1.18 + else if (update === void(0)) continue 1.19 + else result[key] = previous 1.20 + } 1.21 + } 1.22 + for (key in delta) { 1.23 + if (owns.call(delta, key)) { 1.24 + update = delta[key] 1.25 + current = owns.call(result, key) ? result[key] : nil 1.26 + if (current === update) continue 1.27 + else if (update === null) continue 1.28 + else if (update === void(0)) continue 1.29 + else if (current === nil) result[key] = update 1.30 + else if (typeof(update) !== "object") result[key] = update 1.31 + else if (typeof(current) !== "object") result[key] = update 1.32 + else result[key]= rebase({}, current, update) 1.33 + } 1.34 + } 1.35 + 1.36 + return result 1.37 +} 1.38 + 1.39 +module.exports = rebase