Merge pull request #531 from rhysd/homepage

Support 'homepage' field of Cargo.toml and package.json
master
ashley williams 6 years ago committed by GitHub
commit 37606c23f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      src/manifest/mod.rs
  2. 2
      src/manifest/npm/commonjs.rs
  3. 2
      src/manifest/npm/esmodules.rs
  4. 2
      src/manifest/npm/nomodules.rs
  5. 57
      tests/all/manifest.rs
  6. 1
      tests/all/utils/manifest.rs

@ -43,6 +43,7 @@ struct CargoPackage {
#[serde(rename = "license-file")] #[serde(rename = "license-file")]
license_file: Option<String>, license_file: Option<String>,
repository: Option<String>, repository: Option<String>,
homepage: Option<String>,
#[serde(default)] #[serde(default)]
metadata: CargoMetadata, metadata: CargoMetadata,
@ -201,6 +202,7 @@ struct NpmData {
files: Vec<String>, files: Vec<String>,
dts_file: Option<String>, dts_file: Option<String>,
main: String, main: String,
homepage: Option<String>, // https://docs.npmjs.com/files/package.json#homepage
} }
#[doc(hidden)] #[doc(hidden)]
@ -429,6 +431,7 @@ impl CrateData {
dts_file, dts_file,
files, files,
main: js_file, main: js_file,
homepage: self.manifest.package.homepage.clone(),
} }
} }
@ -464,6 +467,7 @@ impl CrateData {
}), }),
files: data.files, files: data.files,
main: data.main, main: data.main,
homepage: data.homepage,
types: data.dts_file, types: data.dts_file,
}) })
} }
@ -491,6 +495,7 @@ impl CrateData {
}), }),
files: data.files, files: data.files,
module: data.main, module: data.main,
homepage: data.homepage,
types: data.dts_file, types: data.dts_file,
side_effects: "false".to_string(), side_effects: "false".to_string(),
}) })
@ -519,6 +524,7 @@ impl CrateData {
}), }),
files: data.files, files: data.files,
browser: data.main, browser: data.main,
homepage: data.homepage,
types: data.dts_file, types: data.dts_file,
}) })
} }

@ -16,5 +16,7 @@ pub struct CommonJSPackage {
pub files: Vec<String>, pub files: Vec<String>,
pub main: String, pub main: String,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub homepage: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub types: Option<String>, pub types: Option<String>,
} }

@ -16,6 +16,8 @@ pub struct ESModulesPackage {
pub files: Vec<String>, pub files: Vec<String>,
pub module: String, pub module: String,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub homepage: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub types: Option<String>, pub types: Option<String>,
#[serde(rename = "sideEffects")] #[serde(rename = "sideEffects")]
pub side_effects: String, pub side_effects: String,

@ -16,5 +16,7 @@ pub struct NoModulesPackage {
pub files: Vec<String>, pub files: Vec<String>,
pub browser: String, pub browser: String,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub homepage: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub types: Option<String>, pub types: Option<String>,
} }

@ -279,6 +279,63 @@ fn it_errors_when_wasm_bindgen_is_not_declared() {
assert!(crate_data.check_crate_config(&step).is_err()); assert!(crate_data.check_crate_config(&step).is_err());
} }
#[test]
fn it_sets_homepage_field_if_available_in_cargo_toml() {
// When 'homepage' is available
let fixture = utils::fixture::Fixture::new();
fixture.hello_world_src_lib().file(
"Cargo.toml",
r#"
[package]
authors = ["The wasm-pack developers"]
description = "so awesome rust+wasm package"
license = "WTFPL"
name = "homepage-field-test"
repository = "https://github.com/rustwasm/wasm-pack.git"
version = "0.1.0"
homepage = "https://rustwasm.github.io/wasm-pack/"
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "=0.2"
[dev-dependencies]
wasm-bindgen-test = "=0.2"
"#,
);
let out_dir = fixture.path.join("pkg");
let crate_data = manifest::CrateData::new(&fixture.path).unwrap();
let step = wasm_pack::progressbar::Step::new(2);
wasm_pack::command::utils::create_pkg_dir(&out_dir, &step).unwrap();
crate_data
.write_package_json(&out_dir, &None, true, "", &step)
.unwrap();
let pkg = utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap();
assert_eq!(
pkg.homepage,
Some("https://rustwasm.github.io/wasm-pack/".to_string()),
);
// When 'homepage' is unavailable
let fixture = fixture::js_hello_world();
let out_dir = fixture.path.join("pkg");
let crate_data = manifest::CrateData::new(&fixture.path).unwrap();
let step = wasm_pack::progressbar::Step::new(2);
wasm_pack::command::utils::create_pkg_dir(&out_dir, &step).unwrap();
crate_data
.write_package_json(&out_dir, &None, true, "", &step)
.unwrap();
let pkg = utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap();
assert_eq!(pkg.homepage, None);
}
#[test] #[test]
fn it_does_not_error_when_wasm_bindgen_is_declared() { fn it_does_not_error_when_wasm_bindgen_is_declared() {
let fixture = fixture::js_hello_world(); let fixture = fixture::js_hello_world();

@ -23,6 +23,7 @@ pub struct NpmPackage {
pub types: String, pub types: String,
#[serde(default = "default_none", rename = "sideEffects")] #[serde(default = "default_none", rename = "sideEffects")]
pub side_effects: String, pub side_effects: String,
pub homepage: Option<String>,
} }
fn default_none() -> String { fn default_none() -> String {

Loading…
Cancel
Save