map (callback) {
      const blocks = []
      for (let i = 0; i < this.blocks.length; i++) {
        const block = this.blocks[i]
        const node = this._ifNode(
          callback(block.node, 'blocks[' + i + '].node', this))
        blocks[i] = {
          node,
          visible: block.visible
        }
      }
      return new BlockNode(blocks)
    }
Create a new BlockNode whose children are the results of calling
the provided callback function for each child of the original node.
@param {function(child: Node, path: string, parent: Node): Node} callback
@returns {BlockNode} Returns a transformed copy of the node