function getNodeAtPath({
  treeData,
  path,
  getNodeKey,
  ignoreCollapsed = true,
}) {
  let foundNodeInfo = null;

  try {
    changeNodeAtPath({
      treeData,
      path,
      getNodeKey,
      ignoreCollapsed,
      newNode: ({ node, treeIndex }) => {
        foundNodeInfo = { node, treeIndex };
        return node;
      },
    });
  } catch (err) {
    // Ignore the error -- the null return will be explanation enough
  }

  return foundNodeInfo;
}
Gets the node at the specified path

@param {!Object[]} treeData
@param {number[]|string[]} path - Array of keys leading up to node to be deleted
@param {!function} getNodeKey - Function to get the key from the nodeData and tree index
@param {boolean=} ignoreCollapsed - Ignore children of nodes without `expanded` set to `true`

@return {Object|null} nodeInfo - The node info at the given path, or null if not found