Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules / ___dist / deps / transformWhere.js
Size: Mime:
"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;