///|
fn main {
  let args = @env.args()
  let output = @sdp.run_cli(strip_program_name(args))
  println(output)
  if output.has_prefix("{\"ok\":false") {
    cli_exit(1)
  }
}

///|
fn strip_program_name(args : Array[String]) -> Array[String] {
  let commands = [
    "parse", "validate", "canonicalize", "inspect", "stats", "audit", "offer-answer",
    "version", "help",
  ]
  let mut index = 0
  while index < args.length() {
    let value = args[index]
    let mut known = false
    for command in commands {
      if value.equal_ignore_ascii_case(command) {
        known = true
      }
    }
    if known || !is_program_path(value) {
      break
    }
    index = index + 1
  }
  args[index:].to_owned()
}

///|
fn is_program_path(value : String) -> Bool {
  let lower = value.to_lower()
  if lower == "node" || lower == "deno" || lower == "bun" {
    return true
  }
  if !(value.contains("/") || value.contains("\\")) {
    return false
  }
  lower.has_suffix(".exe") ||
  lower.has_suffix(".js") ||
  lower.has_suffix(".cjs") ||
  lower.has_suffix(".mjs") ||
  lower.has_suffix(".wasm")
}