Repository URL to install this package:
|
Version:
1.2.0 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.transformWhereObj = void 0;
var _ramda = require("ramda");
var _index = require("../chain-able/index.js");
/**
* @TODO property, value
* @TODO can use http://ramdajs.com/docs/#applySpec - for some of the lifting
* @see http://funkyjavascript.com/lenses/
* @curried 2
*
* @param {Object} shape to match & reshape
* @param {Object} obj object to transform
* @return {Object} transformed object
*/
const transformWhereObj = (0, _index.curry2)((shape, obj) => {
let transformed = obj;
const shapeEvolver = (0, _index.makeShape)(shape);
(0, _index.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 = (0, _ramda.lens)((0, _ramda.path)(traverser.path), (0, _ramda.assocPath)(traverser.path));
transformed = (0, _ramda.set)(setForPath, evolution, transformed); // do not go any deeper
// traverser.skip()
}
});
return transformed;
}); // @NOTE same as above, but handles shape evolving,
// @TODO remove
exports.transformWhereObj = transformWhereObj;
const transformWhereShape = (0, _index.curry2)((shape, obj) => {
let transformed = obj;
const shapeEvolver = (0, _index.makeShape)(shape);
const traverseInstance = (0, _index.recurse)(obj); // traverseInstance.shouldNotPop = true
traverseInstance.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 = (0, _ramda.lens)((0, _ramda.path)(traverser.path), (0, _ramda.assocPath)(traverser.path));
transformed = (0, _ramda.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 })
var _default = transformWhereObj;
exports.default = _default;