123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = set;
- exports.merge = merge;
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
- var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
- var _get = _interopRequireDefault(require("./get"));
- function internalSet(entity, paths, value, removeIfUndefined) {
- if (!paths.length) {
- return value;
- }
- var _paths = (0, _toArray2.default)(paths),
- path = _paths[0],
- restPath = _paths.slice(1);
- var clone;
- if (!entity && typeof path === 'number') {
- clone = [];
- } else if (Array.isArray(entity)) {
- clone = (0, _toConsumableArray2.default)(entity);
- } else {
- clone = (0, _objectSpread2.default)({}, entity);
- }
- // Delete prop if `removeIfUndefined` and value is undefined
- if (removeIfUndefined && value === undefined && restPath.length === 1) {
- delete clone[path][restPath[0]];
- } else {
- clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined);
- }
- return clone;
- }
- function set(entity, paths, value) {
- var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
- // Do nothing if `removeIfUndefined` and parent object not exist
- if (paths.length && removeIfUndefined && value === undefined && !(0, _get.default)(entity, paths.slice(0, -1))) {
- return entity;
- }
- return internalSet(entity, paths, value, removeIfUndefined);
- }
- function isObject(obj) {
- return (0, _typeof2.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() {
- for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {
- sources[_key] = arguments[_key];
- }
- var clone = createEmpty(sources[0]);
- sources.forEach(function (src) {
- function internalMerge(path, parentLoopSet) {
- var loopSet = new Set(parentLoopSet);
- var value = (0, _get.default)(src, path);
- var isArr = Array.isArray(value);
- if (isArr || isObject(value)) {
- // Only add not loop obj
- if (!loopSet.has(value)) {
- loopSet.add(value);
- var originValue = (0, _get.default)(clone, path);
- if (isArr) {
- // Array will always be override
- clone = set(clone, path, []);
- } else if (!originValue || (0, _typeof2.default)(originValue) !== 'object') {
- // Init container if not exist
- clone = set(clone, path, createEmpty(value));
- }
- keys(value).forEach(function (key) {
- internalMerge([].concat((0, _toConsumableArray2.default)(path), [key]), loopSet);
- });
- }
- } else {
- clone = set(clone, path, value);
- }
- }
- internalMerge([]);
- });
- return clone;
- }
|