extend.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. * DevExtreme (core/utils/extend.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var isPlainObject = require("./type").isPlainObject;
  11. var extendFromObject = function(target, source, overrideExistingValues) {
  12. target = target || {};
  13. for (var prop in source) {
  14. if (Object.prototype.hasOwnProperty.call(source, prop)) {
  15. var value = source[prop];
  16. if (!(prop in target) || overrideExistingValues) {
  17. target[prop] = value
  18. }
  19. }
  20. }
  21. return target
  22. };
  23. var extend = function extend(target) {
  24. target = target || {};
  25. var i = 1;
  26. var deep = false;
  27. if ("boolean" === typeof target) {
  28. deep = target;
  29. target = arguments[1] || {};
  30. i++
  31. }
  32. for (; i < arguments.length; i++) {
  33. var source = arguments[i];
  34. if (null == source) {
  35. continue
  36. }
  37. for (var key in source) {
  38. var targetValue = target[key];
  39. var sourceValue = source[key];
  40. var sourceValueIsArray = false;
  41. var clone;
  42. if ("__proto__" === key || target === sourceValue) {
  43. continue
  44. }
  45. if (deep && sourceValue && (isPlainObject(sourceValue) || (sourceValueIsArray = Array.isArray(sourceValue)))) {
  46. if (sourceValueIsArray) {
  47. clone = targetValue && Array.isArray(targetValue) ? targetValue : []
  48. } else {
  49. clone = targetValue && isPlainObject(targetValue) ? targetValue : {}
  50. }
  51. target[key] = extend(deep, clone, sourceValue)
  52. } else {
  53. if (void 0 !== sourceValue) {
  54. target[key] = sourceValue
  55. }
  56. }
  57. }
  58. }
  59. return target
  60. };
  61. exports.extend = extend;
  62. exports.extendFromObject = extendFromObject;