whole_func_string: function getChildPropsOnExit(animate, child, data, exitingNodes, cb) {
    // Whether or not _this_ child has exiting nodes, we want the exit-
    // transition for all children to have the same duration, delay, etc.
    const onExit = animate && animate.onExit;
    animate = assign({}, animate, onExit);
  
    if (exitingNodes) {
      // After the exit transition occurs, trigger the animations for
      // nodes that are neither exiting or entering.
      animate.onEnd = cb;
      const before = animate.onExit && animate.onExit.before ? animate.onExit.before : identity;
      // If nodes need to exit, transform them with the provided onExit.before function.
      data = data.map((datum, idx) => {
        const key = (datum.key || idx).toString();
        return exitingNodes[key] ? assign({}, datum, before(datum, idx, data)) : datum;
      });
    }
  
    return { animate, data };
  }
func_code_string: function getChildPropsOnExit(animate, child, data, exitingNodes, cb) {
    // Whether or not _this_ child has exiting nodes, we want the exit-
    // transition for all children to have the same duration, delay, etc.
    const onExit = animate && animate.onExit;
    animate = assign({}, animate, onExit);
  
    if (exitingNodes) {
      // After the exit transition occurs, trigger the animations for
      // nodes that are neither exiting or entering.
      animate.onEnd = cb;
      const before = animate.onExit && animate.onExit.before ? animate.onExit.before : identity;
      // If nodes need to exit, transform them with the provided onExit.before function.
      data = data.map((datum, idx) => {
        const key = (datum.key || idx).toString();
        return exitingNodes[key] ? assign({}, datum, before(datum, idx, data)) : datum;
      });
    }
  
    return { animate, data };
  }
func_documentation_string: eslint-disable-next-line max-params, max-len