devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
60 lines (59 loc) • 2.03 kB
JavaScript
/**
* DevExtreme (esm/core/utils/extend.js)
* Version: 21.1.4
* Build date: Mon Jun 21 2021
*
* Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
isPlainObject
} from "./type";
export var extendFromObject = function(target, source, overrideExistingValues) {
target = target || {};
for (var prop in source) {
if (Object.prototype.hasOwnProperty.call(source, prop)) {
var value = source[prop];
if (!(prop in target) || overrideExistingValues) {
target[prop] = value
}
}
}
return target
};
export var extend = function extend(target) {
target = target || {};
var i = 1;
var deep = false;
if ("boolean" === typeof target) {
deep = target;
target = arguments[1] || {};
i++
}
for (; i < arguments.length; i++) {
var source = arguments[i];
if (null == source) {
continue
}
for (var key in source) {
var targetValue = target[key];
var sourceValue = source[key];
var sourceValueIsArray = false;
var clone = void 0;
if ("__proto__" === key || "constructor" === key || target === sourceValue) {
continue
}
if (deep && sourceValue && (isPlainObject(sourceValue) || (sourceValueIsArray = Array.isArray(sourceValue)))) {
if (sourceValueIsArray) {
clone = targetValue && Array.isArray(targetValue) ? targetValue : []
} else {
clone = targetValue && isPlainObject(targetValue) ? targetValue : {}
}
target[key] = extend(deep, clone, sourceValue)
} else if (void 0 !== sourceValue) {
target[key] = sourceValue
}
}
}
return target
};