UNPKG

shapey

Version:

A simple syntax for remapping objects, inspired by several of Ramda's spec based functions

42 lines (35 loc) 1.55 kB
"use strict"; 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;