set.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
  3. import _toArray from "@babel/runtime/helpers/esm/toArray";
  4. import get from './get';
  5. function internalSet(entity, paths, value, removeIfUndefined) {
  6. if (!paths.length) {
  7. return value;
  8. }
  9. var _paths = _toArray(paths),
  10. path = _paths[0],
  11. restPath = _paths.slice(1);
  12. var clone;
  13. if (!entity && typeof path === 'number') {
  14. clone = [];
  15. } else if (Array.isArray(entity)) {
  16. clone = _toConsumableArray(entity);
  17. } else {
  18. clone = _objectSpread({}, entity);
  19. }
  20. // Delete prop if `removeIfUndefined` and value is undefined
  21. if (removeIfUndefined && value === undefined && restPath.length === 1) {
  22. delete clone[path][restPath[0]];
  23. } else {
  24. clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined);
  25. }
  26. return clone;
  27. }
  28. export default function set(entity, paths, value) {
  29. var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  30. // Do nothing if `removeIfUndefined` and parent object not exist
  31. if (paths.length && removeIfUndefined && value === undefined && !get(entity, paths.slice(0, -1))) {
  32. return entity;
  33. }
  34. return internalSet(entity, paths, value, removeIfUndefined);
  35. }