index.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.isPlainObject = exports.clone = exports.recursive = exports.merge = exports.main = void 0;
  4. module.exports = exports = main;
  5. exports.default = main;
  6. function main() {
  7. var items = [];
  8. for (var _i = 0; _i < arguments.length; _i++) {
  9. items[_i] = arguments[_i];
  10. }
  11. return merge.apply(void 0, items);
  12. }
  13. exports.main = main;
  14. main.clone = clone;
  15. main.isPlainObject = isPlainObject;
  16. main.recursive = recursive;
  17. function merge() {
  18. var items = [];
  19. for (var _i = 0; _i < arguments.length; _i++) {
  20. items[_i] = arguments[_i];
  21. }
  22. return _merge(items[0] === true, false, items);
  23. }
  24. exports.merge = merge;
  25. function recursive() {
  26. var items = [];
  27. for (var _i = 0; _i < arguments.length; _i++) {
  28. items[_i] = arguments[_i];
  29. }
  30. return _merge(items[0] === true, true, items);
  31. }
  32. exports.recursive = recursive;
  33. function clone(input) {
  34. if (Array.isArray(input)) {
  35. var output = [];
  36. for (var index = 0; index < input.length; ++index)
  37. output.push(clone(input[index]));
  38. return output;
  39. }
  40. else if (isPlainObject(input)) {
  41. var output = {};
  42. for (var index in input)
  43. output[index] = clone(input[index]);
  44. return output;
  45. }
  46. else {
  47. return input;
  48. }
  49. }
  50. exports.clone = clone;
  51. function isPlainObject(input) {
  52. return input && typeof input === 'object' && !Array.isArray(input);
  53. }
  54. exports.isPlainObject = isPlainObject;
  55. function _recursiveMerge(base, extend) {
  56. if (!isPlainObject(base))
  57. return extend;
  58. for (var key in extend) {
  59. if (key === '__proto__' || key === 'constructor' || key === 'prototype')
  60. continue;
  61. base[key] = (isPlainObject(base[key]) && isPlainObject(extend[key])) ?
  62. _recursiveMerge(base[key], extend[key]) :
  63. extend[key];
  64. }
  65. return base;
  66. }
  67. function _merge(isClone, isRecursive, items) {
  68. var result;
  69. if (isClone || !isPlainObject(result = items.shift()))
  70. result = {};
  71. for (var index = 0; index < items.length; ++index) {
  72. var item = items[index];
  73. if (!isPlainObject(item))
  74. continue;
  75. for (var key in item) {
  76. if (key === '__proto__' || key === 'constructor' || key === 'prototype')
  77. continue;
  78. var value = isClone ? clone(item[key]) : item[key];
  79. result[key] = isRecursive ? _recursiveMerge(result[key], value) : value;
  80. }
  81. }
  82. return result;
  83. }