@cookbook/dot-notation
Version:
Object readings and complex transformations using dot notation syntax.
47 lines (37 loc) • 1.22 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _is = _interopRequireDefault(require("./is"));
var _shallowCopy = _interopRequireDefault(require("./shallow-copy"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Merge property from two objects
* @param x
* @param y
*/
var merge = function merge(x, y) {
if (!(_is.default.object(x) || _is.default.object(y))) {
return y;
}
var lhs = (0, _shallowCopy.default)(x);
var rhs = (0, _shallowCopy.default)(y);
var keys = Object.keys(lhs);
var content = (0, _shallowCopy.default)(y);
for (var i = 0; i < keys.length; i += 1) {
var key = keys[i];
var lhsValue = (0, _shallowCopy.default)(lhs[key]);
var rhsValue = (0, _shallowCopy.default)(rhs[key]);
if (_is.default.array(lhsValue) && _is.default.array(rhsValue)) {
content[key] = rhsValue;
} else if (_is.default.object(lhsValue) && _is.default.object(rhsValue)) {
content[key] = merge(lhsValue, rhsValue);
} else {
content[key] = rhsValue || lhsValue;
}
}
return content;
};
var _default = merge;
exports.default = _default;