code: function NBASearchState(node) {
    /**
     * Original graph node.
     */
    this.node = node;
  
    /**
     * Parent of this node in forward search
     */
    this.p1 = null;
  
    /**
     * Parent of this node in reverse search
     */
    this.p2 = null;
  
    /**
     * If this is set to true, then the node was already processed
     * and we should not touch it anymore.
     */
    this.closed = false;
  
    /**
     * Actual distance from this node to its parent in forward search
     */
    this.g1 = Number.POSITIVE_INFINITY;
  
    /**
     * Actual distance from this node to its parent in reverse search
     */
    this.g2 = Number.POSITIVE_INFINITY;
  
  
    /**
     * Underestimated distance from this node to the path-finding source.
     */
    this.f1 = Number.POSITIVE_INFINITY;
  
    /**
     * Underestimated distance from this node to the path-finding target.
     */
    this.f2 = Number.POSITIVE_INFINITY;
  
    // used to reconstruct heap when fScore is updated. TODO: do I need them both?
  
    /**
     * Index of this node in the forward heap.
     */
    this.h1 = -1;
  
    /**
     * Index of this node in the reverse heap.
     */
    this.h2 = -1;
  }
docs: Creates new instance of NBASearchState. The instance stores information
  about search state, and is used by NBA* algorithm.
  
  @param {Object} node - original graph node