diff --git a/src/lib.rs b/src/lib.rs index 884f24f..bcdcf30 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -39,8 +39,8 @@ struct Repository { url: String, } -fn read_cargo_toml() -> Result { - let mut cargo_file = File::open("Cargo.toml")?; +fn read_cargo_toml(path: &str) -> Result { + let mut cargo_file = File::open(format!("{}/Cargo.toml", path))?; let mut cargo_contents = String::new(); cargo_file.read_to_string(&mut cargo_contents)?; @@ -68,10 +68,10 @@ fn create_pkg_dir() -> Result<(), Error> { } /// Generate a package.json file inside in `./pkg`. -pub fn write_package_json() -> Result<(), Error> { +pub fn write_package_json(path: &str) -> Result<(), Error> { create_pkg_dir()?; let mut pkg_file = File::create("./pkg/package.json")?; - let crate_data = read_cargo_toml()?; + let crate_data = read_cargo_toml(path)?; let npm_data = crate_data.into_npm(); let npm_json = serde_json::to_string(&npm_data)?; pkg_file.write_all(npm_json.as_bytes())?; diff --git a/src/main.rs b/src/main.rs index ae8db5f..08fd3f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,7 +18,7 @@ struct Cli { enum Command { #[structopt(name = "init")] /// 🐣 initialize a package.json based on your compiled wasm - Init {}, + Init { path: Option }, #[structopt(name = "pack")] /// 🍱 create a tar of your npm package but don't publish! Pack {}, @@ -28,8 +28,11 @@ enum Command { } main!(|args: Cli, log_level: verbosity| match args.cmd { - Command::Init { .. } => { - wasm_pack::write_package_json()?; + Command::Init { path } => { + match path { + Some(p) => wasm_pack::write_package_json(&p)?, + None => wasm_pack::write_package_json(".")?, + } println!("✍️ wrote a package.json!"); } Command::Pack { .. } => { diff --git a/tests/wasm-pack.rs b/tests/wasm-pack.rs index 5f9120d..c2bcaf1 100644 --- a/tests/wasm-pack.rs +++ b/tests/wasm-pack.rs @@ -3,7 +3,13 @@ extern crate wasm_pack; use std::fs; #[test] -fn it_creates_a_package_json() { - assert!(wasm_pack::write_package_json().is_ok()); +fn it_creates_a_package_json_default_path() { + assert!(wasm_pack::write_package_json(".").is_ok()); + assert!(fs::metadata("./pkg/package.json").is_ok()); +} + +#[test] +fn it_creates_a_package_json_provided_path() { + assert!(wasm_pack::write_package_json("./examples/js-hello-world").is_ok()); assert!(fs::metadata("./pkg/package.json").is_ok()); }