set.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = set;
  7. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  8. var _get = _interopRequireDefault(require("./get"));
  9. function internalSet(entity, paths, value, removeIfUndefined) {
  10. if (!paths.length) {
  11. return value;
  12. }
  13. const [path, ...restPath] = paths;
  14. let clone;
  15. if (!entity && typeof path === 'number') {
  16. clone = [];
  17. } else if (Array.isArray(entity)) {
  18. clone = [...entity];
  19. } else {
  20. clone = (0, _extends2.default)({}, entity);
  21. }
  22. // Delete prop if `removeIfUndefined` and value is undefined
  23. if (removeIfUndefined && value === undefined && restPath.length === 1) {
  24. delete clone[path][restPath[0]];
  25. } else {
  26. clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined);
  27. }
  28. return clone;
  29. }
  30. function set(entity, paths, value) {
  31. let removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  32. // Do nothing if `removeIfUndefined` and parent object not exist
  33. if (paths.length && removeIfUndefined && value === undefined && !(0, _get.default)(entity, paths.slice(0, -1))) {
  34. return entity;
  35. }
  36. return internalSet(entity, paths, value, removeIfUndefined);
  37. }