shapey
Version:
A simple syntax for remapping objects, inspired by several of Ramda's spec based functions
42 lines (35 loc) • 1.55 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _isObject = _interopRequireDefault(require("vanillas/isObject"));
var _curry = _interopRequireDefault(require("vanillas/curry"));
var _merge = _interopRequireDefault(require("vanillas/merge"));
var _util = require("./util");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* A port of [Ramda's evolve()](http://ramdajs.com/docs/#evolve), but the transforms are _always_ applied regardless if the key/value pair exists in the input object or not.
*
* @function
* @name alwaysEvolve
* @sig {k: (a -> b)} -> {k: v} -> {k: v}
* @param {Object} transforms An object whose values may be transform functions that need to be wrapped in try/catch
* @param {Object} input The input object to pass through prop-level transformations
* @returns {Object} The modified input object, with any prop-level transforms applied to it
*/
var alwaysEvolve = (0, _curry.default)(function (transforms, input) {
var result = {};
var spec = (0, _util.safeSpecTransforms)(transforms);
var object = (0, _util.objectify)(input);
Object.keys(spec).forEach(function (key) {
if (typeof spec[key] === 'function') {
result[key] = spec[key](object[key]);
} else if ((0, _isObject.default)(spec[key])) {
result[key] = alwaysEvolve(spec[key], object[key]);
} else {
result[key] = spec[key];
}
});
return (0, _merge.default)(input, result);
});
var _default = alwaysEvolve;
exports.default = _default;