///|
fn cli_selector_is_valid(selector : StringView) -> Bool {
  @sel.is_valid(selector)
}

///|
fn cli_selected_nodes(
  root : @dom.Node,
  options : CliOptions,
) -> Array[@dom.Node]? {
  let nodes = match options.selector {
    Some(selector) => {
      if !cli_selector_is_valid(selector) {
        return None
      }
      @sel.query(root, selector)
    }
    None => [root]
  }
  if nodes.is_empty() {
    Some([])
  } else if options.first {
    Some([nodes[0]])
  } else {
    Some(nodes)
  }
}