valueUtil.js 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.cloneByNamePathList = cloneByNamePathList;
  7. exports.containsNamePath = containsNamePath;
  8. exports.getNamePath = getNamePath;
  9. exports.getValue = getValue;
  10. exports.matchNamePath = matchNamePath;
  11. exports.setValue = setValue;
  12. exports.setValues = setValues;
  13. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  14. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  15. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  16. var _typeUtil = require("./typeUtil");
  17. var _get = _interopRequireDefault(require("../../vc-util/get"));
  18. var _set = _interopRequireDefault(require("../../vc-util/set"));
  19. /**
  20. * Convert name to internal supported format.
  21. * This function should keep since we still thinking if need support like `a.b.c` format.
  22. * 'a' => ['a']
  23. * 123 => [123]
  24. * ['a', 123] => ['a', 123]
  25. */
  26. function getNamePath(path) {
  27. return (0, _typeUtil.toArray)(path);
  28. }
  29. function getValue(store, namePath) {
  30. var value = (0, _get.default)(store, namePath);
  31. return value;
  32. }
  33. function setValue(store, namePath, value) {
  34. var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  35. var newStore = (0, _set.default)(store, namePath, value, removeIfUndefined);
  36. return newStore;
  37. }
  38. function containsNamePath(namePathList, namePath) {
  39. return namePathList && namePathList.some(function (path) {
  40. return matchNamePath(path, namePath);
  41. });
  42. }
  43. function isObject(obj) {
  44. return (0, _typeof2.default)(obj) === 'object' && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;
  45. }
  46. /**
  47. * Copy values into store and return a new values object
  48. * ({ a: 1, b: { c: 2 } }, { a: 4, b: { d: 5 } }) => { a: 4, b: { c: 2, d: 5 } }
  49. */
  50. function internalSetValues(store, values) {
  51. var newStore = Array.isArray(store) ? (0, _toConsumableArray2.default)(store) : (0, _objectSpread2.default)({}, store);
  52. if (!values) {
  53. return newStore;
  54. }
  55. Object.keys(values).forEach(function (key) {
  56. var prevValue = newStore[key];
  57. var value = values[key];
  58. // If both are object (but target is not array), we use recursion to set deep value
  59. var recursive = isObject(prevValue) && isObject(value);
  60. newStore[key] = recursive ? internalSetValues(prevValue, value || {}) : value;
  61. });
  62. return newStore;
  63. }
  64. function setValues(store) {
  65. for (var _len = arguments.length, restValues = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  66. restValues[_key - 1] = arguments[_key];
  67. }
  68. return restValues.reduce(function (current, newStore) {
  69. return internalSetValues(current, newStore);
  70. }, store);
  71. }
  72. function cloneByNamePathList(store, namePathList) {
  73. var newStore = {};
  74. namePathList.forEach(function (namePath) {
  75. var value = getValue(store, namePath);
  76. newStore = setValue(newStore, namePath, value);
  77. });
  78. return newStore;
  79. }
  80. function matchNamePath(namePath, changedNamePath) {
  81. if (!namePath || !changedNamePath || namePath.length !== changedNamePath.length) {
  82. return false;
  83. }
  84. return namePath.every(function (nameUnit, i) {
  85. return changedNamePath[i] === nameUnit;
  86. });
  87. }