set.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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 _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  8. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  9. var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
  10. var _get = _interopRequireDefault(require("./get"));
  11. function internalSet(entity, paths, value, removeIfUndefined) {
  12. if (!paths.length) {
  13. return value;
  14. }
  15. var _paths = (0, _toArray2.default)(paths),
  16. path = _paths[0],
  17. restPath = _paths.slice(1);
  18. var clone;
  19. if (!entity && typeof path === 'number') {
  20. clone = [];
  21. } else if (Array.isArray(entity)) {
  22. clone = (0, _toConsumableArray2.default)(entity);
  23. } else {
  24. clone = (0, _objectSpread2.default)({}, entity);
  25. }
  26. // Delete prop if `removeIfUndefined` and value is undefined
  27. if (removeIfUndefined && value === undefined && restPath.length === 1) {
  28. delete clone[path][restPath[0]];
  29. } else {
  30. clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined);
  31. }
  32. return clone;
  33. }
  34. function set(entity, paths, value) {
  35. var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  36. // Do nothing if `removeIfUndefined` and parent object not exist
  37. if (paths.length && removeIfUndefined && value === undefined && !(0, _get.default)(entity, paths.slice(0, -1))) {
  38. return entity;
  39. }
  40. return internalSet(entity, paths, value, removeIfUndefined);
  41. }