UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

97 lines (90 loc) 3.17 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _typeof = require('@babel/runtime/helpers/typeof'); var tslib_es6 = require('../tslib.es6-01322ba9.js'); var lodashMini_get = require('./get.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof); function internalSet(entity, paths, value, removeIfUndefined) { if (!paths.length) { return value; } var path = paths[0], restPath = paths.slice(1); var clone; if (!entity && typeof path === 'number') { clone = []; } else if (Array.isArray(entity)) { clone = tslib_es6.__spreadArray([], entity, true); } else { clone = tslib_es6.__assign({}, entity); } // Delete prop if `removeIfUndefined` and value is undefined if (removeIfUndefined && value === undefined && restPath.length === 1) { // @ts-ignore delete clone[path][restPath[0]]; } else { // @ts-ignore clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined); } return clone; } function set(entity, paths, value, removeIfUndefined) { if (removeIfUndefined === void 0) { removeIfUndefined = false; } // Do nothing if `removeIfUndefined` and parent object not exist if (paths.length && removeIfUndefined && value === undefined // @ts-ignore && !lodashMini_get.get(entity, paths.slice(0, -1).join('.'))) { return entity; } return internalSet(entity, paths, value, removeIfUndefined); } function isObject(obj) { return _typeof__default["default"](obj) === 'object' && obj !== null && Object.getPrototypeOf(obj) === Object.prototype; } function createEmpty(source) { return Array.isArray(source) ? [] : {}; } var keys = typeof Reflect === 'undefined' ? Object.keys : Reflect.ownKeys; /** * Merge objects which will create */ function merge() { var sources = []; for (var _i = 0; _i < arguments.length; _i++) { sources[_i] = arguments[_i]; } var clone = createEmpty(sources[0]); sources.forEach(function (src) { function internalMerge(path, parentLoopSet) { var loopSet = new Set(parentLoopSet); var value = lodashMini_get.get(src, path.join('.')); var isArr = Array.isArray(value); if (isArr || isObject(value)) { // Only add not loop obj if (!loopSet.has(value)) { loopSet.add(value); var originValue = lodashMini_get.get(clone, path.join('.')); if (isArr) { // Array will always be override clone = set(clone, path, []); } else if (!originValue || _typeof__default["default"](originValue) !== 'object') { // Init container if not exist clone = set(clone, path, createEmpty(value)); } keys(value).forEach(function (key) { internalMerge(tslib_es6.__spreadArray(tslib_es6.__spreadArray([], path, true), [key], false), loopSet); }); } } else { clone = set(clone, path, value); } } internalMerge([]); }); return clone; } exports.merge = merge; exports.set = set;