UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

60 lines (59 loc) 2.06 kB
/** * DevExtreme (esm/__internal/core/utils/m_extend.js) * Version: 24.2.6 * Build date: Mon Mar 17 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import { isPlainObject } from "../../../core/utils/type"; export const extendFromObject = function(target, source, overrideExistingValues) { target = target || {}; for (const prop in source) { if (Object.prototype.hasOwnProperty.call(source, prop)) { const value = source[prop]; if (!(prop in target) || overrideExistingValues) { target[prop] = value } } } return target }; export const extend = function(target) { target = target || {}; let i = 1; let deep = false; if ("boolean" === typeof target) { deep = target; target = arguments[1] || {}; i++ } for (; i < arguments.length; i++) { const source = arguments[i]; if (null == source) { continue } for (const key in source) { const targetValue = target[key]; const sourceValue = source[key]; let sourceValueIsArray = false; let clone; 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 };