text: "use strict";
  
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  
  Object.defineProperty(exports, "__esModule", {
    value: true
  });
  exports.default = set;
  
  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);
  }