UNPKG

custom-app

Version:

ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������

108 lines (102 loc) 3.8 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var isWhat = require('is-what'); function assignProp(carry, key, newVal, originalObject) { var propType = originalObject.propertyIsEnumerable(key) ? 'enumerable' : 'nonenumerable'; if (propType === 'enumerable') carry[key] = newVal; if (propType === 'nonenumerable') { Object.defineProperty(carry, key, { value: newVal, enumerable: false, writable: true, configurable: true }); } } function mergeRecursively(origin, newComer, extensions) { // work directly on newComer if its not an object if (!isWhat.isPlainObject(newComer)) { // extend merge rules if (extensions && isWhat.isArray(extensions)) { extensions.forEach(function (extend) { newComer = extend(origin, newComer); }); } return newComer; } // define newObject to merge all values upon var newObject = {}; if (isWhat.isPlainObject(origin)) { var props_1 = Object.getOwnPropertyNames(origin); var symbols_1 = Object.getOwnPropertySymbols(origin); newObject = props_1.concat(symbols_1).reduce(function (carry, key) { // @ts-ignore var targetVal = origin[key]; if ((!isWhat.isSymbol(key) && !Object.getOwnPropertyNames(newComer).includes(key)) || (isWhat.isSymbol(key) && !Object.getOwnPropertySymbols(newComer).includes(key))) { assignProp(carry, key, targetVal, origin); } return carry; }, {}); } var props = Object.getOwnPropertyNames(newComer); var symbols = Object.getOwnPropertySymbols(newComer); var result = props.concat(symbols).reduce(function (carry, key) { // re-define the origin and newComer as targetVal and newVal var newVal = newComer[key]; var targetVal = (isWhat.isPlainObject(origin)) // @ts-ignore ? origin[key] : undefined; // extend merge rules if (extensions && isWhat.isArray(extensions)) { extensions.forEach(function (extend) { newVal = extend(targetVal, newVal); }); } // When newVal is an object do the merge recursively if (targetVal !== undefined && isWhat.isPlainObject(newVal)) { newVal = mergeRecursively(targetVal, newVal, extensions); } assignProp(carry, key, newVal, newComer); return carry; }, newObject); return result; } /** * Merge anything recursively. * Objects get merged, special objects (classes etc.) are re-assigned "as is". * Basic types overwrite objects or other basic types. * * @param {(IConfig | any)} origin * @param {...any[]} newComers * @returns the result */ function merge(origin) { var newComers = []; for (var _i = 1; _i < arguments.length; _i++) { newComers[_i - 1] = arguments[_i]; } var extensions = null; var base = origin; if (isWhat.isPlainObject(origin) && origin.extensions && Object.keys(origin).length === 1) { base = {}; extensions = origin.extensions; } return newComers.reduce(function (result, newComer) { return mergeRecursively(result, newComer, extensions); }, base); } function concatArrays(originVal, newVal) { if (isWhat.isArray(originVal) && isWhat.isArray(newVal)) { // concat logic return originVal.concat(newVal); } return newVal; // always return newVal as fallback!! } exports.merge = merge; exports.concatArrays = concatArrays; exports.default = merge;