123456789101112131415161718192021222324252627282930313233343536 |
- "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
|