Skip to content

Commit

Permalink
feat: add support for --if-present
Browse files Browse the repository at this point in the history
  • Loading branch information
anonrig committed Jul 25, 2023
1 parent 076623b commit ff5e2d6
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 7 deletions.
5 changes: 5 additions & 0 deletions crates/cli/src/commands.rs
Expand Up @@ -64,4 +64,9 @@ impl AddArgs {
pub struct RunScriptArgs {
/// A pre-defined package script.
pub command: String,
/// You can use the --if-present flag to avoid exiting with a non-zero exit code when the
/// script is undefined. This lets you run potentially undefined scripts without breaking the
/// execution chain.
#[arg(long = "if-present")]
pub if_present: bool,
}
5 changes: 3 additions & 2 deletions crates/cli/src/lib.rs
Expand Up @@ -36,11 +36,12 @@ async fn run_commands(cli: Cli) -> Result<()> {
.await?;
}
Subcommands::Test => {
PackageJson::from_path(&package_json_path)?.execute_command("test")?;
PackageJson::from_path(&package_json_path)?.execute_command("test", false)?;
}
Subcommands::RunScript(args) => {
let command = &args.command;
PackageJson::from_path(&package_json_path)?.execute_command(command)?;
PackageJson::from_path(&package_json_path)?
.execute_command(command, args.if_present)?;
}
}

Expand Down
19 changes: 14 additions & 5 deletions crates/package_json/src/lib.rs
Expand Up @@ -145,7 +145,7 @@ impl PackageJson {
Ok(())
}

pub fn execute_command(&self, command: &str) -> Result<(), PackageJsonError> {
pub fn execute_command(&self, command: &str, if_present: bool) -> Result<(), PackageJsonError> {
match self
.value
.get("scripts")
Expand All @@ -166,7 +166,13 @@ impl PackageJson {

Ok(())
}
None => Err(PackageJsonError::NoScript(command.to_string())),
None => {
if if_present {
Ok(())
} else {
Err(PackageJsonError::NoScript(command.to_string()))
}
}
}
}
}
Expand Down Expand Up @@ -234,7 +240,7 @@ mod tests {
let dir = tempdir().unwrap();
let tmp = dir.path().join("package.json");
let package_json = PackageJson::create_if_needed(&tmp).unwrap();
package_json.execute_command("test").expect_err("test command should not exist");
package_json.execute_command("test", false).expect_err("test command should not exist");
}

#[test]
Expand All @@ -249,8 +255,11 @@ mod tests {
let tmp = NamedTempFile::new().unwrap();
write!(tmp.as_file(), "{}", data).unwrap();
let package_json = PackageJson::create_if_needed(&tmp.path().to_path_buf()).unwrap();
package_json.execute_command("test").unwrap();
package_json.execute_command("invalid").expect_err("invalid command should not exist");
package_json.execute_command("test", false).unwrap();
package_json
.execute_command("invalid", false)
.expect_err("invalid command should not exist");
package_json.execute_command("invalid", true).unwrap();
}

#[test]
Expand Down

0 comments on commit ff5e2d6

Please sign in to comment.