Repository URL to install this package:
|
Version:
1.3.1 ▾
|
import { path, lens, assocPath, set } from 'ramda'
import { makeShape, recurse, curry2 } from 'chain'
/**
* @TODO property, value
* @TODO can use http://ramdajs.com/docs/#applySpec - for some of the lifting
* @see http://funkyjavascript.com/lenses/
* @curried 2
*
* @param shape to match & reshape
* @param obj object to transform
* @return transformed object
*/
const transformWhereObj = curry2((shape, obj) => {
let transformed = obj
const shapeEvolver = makeShape(shape)
recurse(obj).forEach((x, key, traverser) => {
if (traverser.isRoot) return
const evolution = shapeEvolver(x, key)
// when we have an evolution, use it
if (evolution !== false) {
const setForPath = lens(path(traverser.path), assocPath(traverser.path))
transformed = set(setForPath, evolution, transformed)
// do not go any deeper
// traverser.skip()
}
})
return transformed
})
// @PLAY
// @NOTE these are similar to the lens prop above
// transformed = R.assocPath(traverser.path, evolution, transformed)
// const setForPath = R.assocPath(this.path, R.__, transformed)
// traverser.update(evolution)
// const lensForPath = R.lensPath()
// transformed = R.over(setForPath, R.negate, { x: 1, y: 2 })
export { transformWhereObj, transformWhereObj as transformWhere }
export default transformWhereObj