diff --git a/Cargo.lock b/Cargo.lock index 2243c8e..6c78a18 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1221,7 +1221,7 @@ dependencies = [ [[package]] name = "runrs" -version = "1.1.4" +version = "1.1.5" dependencies = [ "argh", "reqwest", diff --git a/Cargo.toml b/Cargo.toml index fc38eb0..05603b0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "runrs" -version = "1.1.4" +version = "1.1.5" edition = "2018" license = "MIT/Apache-2.0" description = "A Tool for Run Rust Scripts" diff --git a/src/run_ts.rs b/src/run_ts.rs index 4534edd..28cc82c 100644 --- a/src/run_ts.rs +++ b/src/run_ts.rs @@ -4,13 +4,21 @@ use rust_util::util_env::is_env_on; use std::fs; use std::process::Command; +const RUNTIME_DENO: &str = "--runtime-deno"; +const RUNTIME_BUN: &str = "--runtime-bun"; + pub fn do_run_script(args: &RunScriptArgs) { if args.arguments.is_empty() { failure_and_exit!("Must assign a script file name"); } debugging!("Run ts args: {:?}", args.arguments); + + let mut is_runtime_deno = true; let (script_file, first_arg) = (|| { for (i, arg) in args.arguments.iter().enumerate() { + if arg == RUNTIME_DENO || arg == RUNTIME_BUN { + is_runtime_deno = arg == RUNTIME_DENO; + } if !arg.starts_with("--") { return (arg, i == 0); } @@ -20,17 +28,33 @@ pub fn do_run_script(args: &RunScriptArgs) { verify::verify_script(script_file, is_env_on("RUNTS_SKIP_VERIFY")); let mut cmd = Command::new("/usr/bin/env"); - cmd.args(["-S", "deno", "run"]); + // #!/usr/bin/env runts -- --allow-env + // #!/usr/bin/env runts -- [--runtime-deno | --runtime-bun] if first_arg { let first_line_args = read_first_line_parse_args(script_file); + debugging!("Runts first line args: {:?}", first_line_args); let left_first_line_args = first_line_args .iter() .skip_while(|arg| *arg != "--" && *arg != "run") .skip(1) + .filter(|arg| { + if *arg == RUNTIME_DENO || *arg == RUNTIME_BUN { + is_runtime_deno = *arg == RUNTIME_DENO; + debugging!("Runts runtime arg: {}, is runtime deno: {}", *arg, is_runtime_deno); + return false; + } + true + }) .collect::>(); + cmd.args(["-S", iff!(is_runtime_deno, "deno", "bun"), "run"]); cmd.args(left_first_line_args); + } else { + cmd.args(["-S", iff!(is_runtime_deno, "deno", "bun"), "run"]); } for arg in &args.arguments { + if arg == RUNTIME_DENO || arg == RUNTIME_BUN { + continue; + } cmd.arg(arg); }