Refactor: make `write_package_json` a method on `CargoManifest`

master
Nick Fitzgerald 7 years ago
parent 511e6c29a0
commit 0e09b3fd3c
  1. 3
      src/command/build.rs
  2. 54
      src/manifest/mod.rs
  3. 43
      tests/all/manifest.rs

@ -253,8 +253,7 @@ impl Build {
fn step_create_json(&mut self, step: &Step, log: &Logger) -> Result<(), failure::Error> {
info!(&log, "Writing a package.json...");
manifest::write_package_json(
&self.crate_data,
self.crate_data.write_package_json(
&self.out_dir,
&self.scope,
self.disable_dts,

@ -97,6 +97,33 @@ impl CargoManifest {
Ok(manifest)
}
/// Generate a package.json file inside in `./pkg`.
pub fn write_package_json(
&self,
out_dir: &Path,
scope: &Option<String>,
disable_dts: bool,
target: &str,
step: &Step,
) -> Result<(), failure::Error> {
let msg = format!("{}Writing a package.json...", emoji::MEMO);
PBAR.step(step, &msg);
let pkg_file_path = out_dir.join("package.json");
let mut pkg_file = File::create(pkg_file_path)?;
let npm_data = if target == "nodejs" {
self.clone().into_commonjs(scope, disable_dts)
} else if target == "no-modules" {
self.clone().into_nomodules(scope, disable_dts)
} else {
self.clone().into_esmodules(scope, disable_dts)
};
let npm_json = serde_json::to_string_pretty(&npm_data)?;
pkg_file.write_all(npm_json.as_bytes())?;
Ok(())
}
fn into_commonjs(mut self, scope: &Option<String>, disable_dts: bool) -> NpmPackage {
let filename = self.package.name.replace("-", "_");
let wasm_file = format!("{}_bg.wasm", filename);
@ -210,33 +237,6 @@ impl CargoManifest {
}
}
/// Generate a package.json file inside in `./pkg`.
pub fn write_package_json(
crate_data: &CargoManifest,
out_dir: &Path,
scope: &Option<String>,
disable_dts: bool,
target: &str,
step: &Step,
) -> Result<(), failure::Error> {
let msg = format!("{}Writing a package.json...", emoji::MEMO);
PBAR.step(step, &msg);
let pkg_file_path = out_dir.join("package.json");
let mut pkg_file = File::create(pkg_file_path)?;
let npm_data = if target == "nodejs" {
crate_data.clone().into_commonjs(scope, disable_dts)
} else if target == "no-modules" {
crate_data.clone().into_nomodules(scope, disable_dts)
} else {
crate_data.clone().into_esmodules(scope, disable_dts)
};
let npm_json = serde_json::to_string_pretty(&npm_data)?;
pkg_file.write_all(npm_json.as_bytes())?;
Ok(())
}
/// Get the crate name for the crate at the given path.
pub fn get_crate_name(crate_data: &CargoManifest) -> &str {
&crate_data.package.name

@ -65,7 +65,11 @@ fn it_creates_a_package_json_default_path() {
let crate_data = manifest::CargoManifest::read(&fixture.path).unwrap();
let step = wasm_pack::progressbar::Step::new(1);
wasm_pack::command::utils::create_pkg_dir(&out_dir, &step).unwrap();
assert!(manifest::write_package_json(&crate_data, &out_dir, &None, false, "", &step).is_ok());
assert!(
crate_data
.write_package_json(&out_dir, &None, false, "", &step)
.is_ok()
);
let package_json_path = &fixture.path.join("pkg").join("package.json");
assert!(fs::metadata(package_json_path).is_ok());
assert!(utils::manifest::read_package_json(&fixture.path, &out_dir).is_ok());
@ -99,7 +103,11 @@ fn it_creates_a_package_json_provided_path() {
let crate_data = manifest::CargoManifest::read(&fixture.path).unwrap();
let step = wasm_pack::progressbar::Step::new(1);
wasm_pack::command::utils::create_pkg_dir(&out_dir, &step).unwrap();
assert!(manifest::write_package_json(&crate_data, &out_dir, &None, false, "", &step).is_ok());
assert!(
crate_data
.write_package_json(&out_dir, &None, false, "", &step)
.is_ok()
);
let package_json_path = &fixture.path.join("pkg").join("package.json");
assert!(fs::metadata(package_json_path).is_ok());
utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap();
@ -127,15 +135,9 @@ fn it_creates_a_package_json_provided_path_with_scope() {
let step = wasm_pack::progressbar::Step::new(1);
wasm_pack::command::utils::create_pkg_dir(&out_dir, &step).unwrap();
assert!(
manifest::write_package_json(
&crate_data,
&out_dir,
&Some("test".to_string()),
false,
"",
&step
)
.is_ok()
crate_data
.write_package_json(&out_dir, &Some("test".to_string()), false, "", &step)
.is_ok()
);
let package_json_path = &fixture.path.join("pkg").join("package.json");
assert!(fs::metadata(package_json_path).is_ok());
@ -164,7 +166,9 @@ fn it_creates_a_pkg_json_with_correct_files_on_node() {
let step = wasm_pack::progressbar::Step::new(1);
wasm_pack::command::utils::create_pkg_dir(&out_dir, &step).unwrap();
assert!(
manifest::write_package_json(&crate_data, &out_dir, &None, false, "nodejs", &step).is_ok()
crate_data
.write_package_json(&out_dir, &None, false, "nodejs", &step)
.is_ok()
);
let package_json_path = &out_dir.join("package.json");
assert!(fs::metadata(package_json_path).is_ok());
@ -199,7 +203,8 @@ fn it_creates_a_pkg_json_with_correct_files_on_nomodules() {
let step = wasm_pack::progressbar::Step::new(1);
wasm_pack::command::utils::create_pkg_dir(&out_dir, &step).unwrap();
assert!(
manifest::write_package_json(&crate_data, &out_dir, &None, false, "no-modules", &step)
crate_data
.write_package_json(&out_dir, &None, false, "no-modules", &step)
.is_ok()
);
let package_json_path = &out_dir.join("package.json");
@ -234,7 +239,11 @@ fn it_creates_a_pkg_json_in_out_dir() {
let crate_data = manifest::CargoManifest::read(&fixture.path).unwrap();
let step = wasm_pack::progressbar::Step::new(1);
wasm_pack::command::utils::create_pkg_dir(&out_dir, &step).unwrap();
assert!(manifest::write_package_json(&crate_data, &out_dir, &None, false, "", &step).is_ok());
assert!(
crate_data
.write_package_json(&out_dir, &None, false, "", &step)
.is_ok()
);
let package_json_path = &fixture.path.join(&out_dir).join("package.json");
assert!(fs::metadata(package_json_path).is_ok());
@ -248,7 +257,11 @@ fn it_creates_a_package_json_with_correct_keys_when_types_are_skipped() {
let crate_data = manifest::CargoManifest::read(&fixture.path).unwrap();
let step = wasm_pack::progressbar::Step::new(1);
wasm_pack::command::utils::create_pkg_dir(&out_dir, &step).unwrap();
assert!(manifest::write_package_json(&crate_data, &out_dir, &None, true, "", &step).is_ok());
assert!(
crate_data
.write_package_json(&out_dir, &None, true, "", &step)
.is_ok()
);
let package_json_path = &out_dir.join("package.json");
assert!(fs::metadata(package_json_path).is_ok());
assert!(utils::manifest::read_package_json(&fixture.path, &out_dir).is_ok());

Loading…
Cancel
Save