feat: runrs v1.1.5, support runts deno or bun runtime

This commit is contained in:
2026-01-04 19:34:42 +08:00
parent 69288f9203
commit 6a4cd86e25
3 changed files with 27 additions and 3 deletions

2
Cargo.lock generated
View File

@@ -1221,7 +1221,7 @@ dependencies = [
[[package]]
name = "runrs"
version = "1.1.4"
version = "1.1.5"
dependencies = [
"argh",
"reqwest",

View File

@@ -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"

View File

@@ -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] <args>
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::<Vec<_>>();
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);
}