From f444b64e1e8397f575be35c65ec0a74b5cdb9dd3 Mon Sep 17 00:00:00 2001 From: lucashorward Date: Sun, 3 May 2020 13:49:09 +0200 Subject: [PATCH] Added keywords --- src/manifest/mod.rs | 14 ++++++++- src/manifest/npm/commonjs.rs | 2 ++ src/manifest/npm/esmodules.rs | 2 ++ src/manifest/npm/nomodules.rs | 2 ++ tests/all/manifest.rs | 57 +++++++++++++++++++++++++++++++++++ tests/all/utils/manifest.rs | 1 + 6 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/manifest/mod.rs b/src/manifest/mod.rs index 668541a..53c8784 100644 --- a/src/manifest/mod.rs +++ b/src/manifest/mod.rs @@ -390,7 +390,8 @@ struct NpmData { files: Vec, dts_file: Option, main: String, - homepage: Option, // https://docs.npmjs.com/files/package.json#homepage + homepage: Option, // https://docs.npmjs.com/files/package.json#homepage, + keywords: Option>, // https://docs.npmjs.com/files/package.json#keywords } #[doc(hidden)] @@ -607,6 +608,12 @@ impl CrateData { None }; + let keywords = if pkg.keywords.len() > 0 { + Some(pkg.keywords.clone()) + } else { + None + }; + if let Ok(entries) = fs::read_dir(out_dir) { let file_names = entries .filter_map(|e| e.ok()) @@ -625,6 +632,7 @@ impl CrateData { files, main: js_file, homepage: self.manifest.package.homepage.clone(), + keywords: keywords, } } @@ -662,6 +670,7 @@ impl CrateData { main: data.main, homepage: data.homepage, types: data.dts_file, + keywords: data.keywords, }) } @@ -696,6 +705,7 @@ impl CrateData { homepage: data.homepage, types: data.dts_file, side_effects: false, + keywords: data.keywords, }) } @@ -725,6 +735,7 @@ impl CrateData { homepage: data.homepage, types: data.dts_file, side_effects: false, + keywords: data.keywords, }) } @@ -758,6 +769,7 @@ impl CrateData { browser: data.main, homepage: data.homepage, types: data.dts_file, + keywords: data.keywords, }) } diff --git a/src/manifest/npm/commonjs.rs b/src/manifest/npm/commonjs.rs index 8d8ce8b..e421c9c 100644 --- a/src/manifest/npm/commonjs.rs +++ b/src/manifest/npm/commonjs.rs @@ -19,4 +19,6 @@ pub struct CommonJSPackage { pub homepage: Option, #[serde(skip_serializing_if = "Option::is_none")] pub types: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub keywords: Option>, } diff --git a/src/manifest/npm/esmodules.rs b/src/manifest/npm/esmodules.rs index b16c5c6..640a926 100644 --- a/src/manifest/npm/esmodules.rs +++ b/src/manifest/npm/esmodules.rs @@ -21,4 +21,6 @@ pub struct ESModulesPackage { pub types: Option, #[serde(rename = "sideEffects")] pub side_effects: bool, + #[serde(skip_serializing_if = "Option::is_none")] + pub keywords: Option>, } diff --git a/src/manifest/npm/nomodules.rs b/src/manifest/npm/nomodules.rs index 913e97e..6ac2508 100644 --- a/src/manifest/npm/nomodules.rs +++ b/src/manifest/npm/nomodules.rs @@ -19,4 +19,6 @@ pub struct NoModulesPackage { pub homepage: Option, #[serde(skip_serializing_if = "Option::is_none")] pub types: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub keywords: Option>, } diff --git a/tests/all/manifest.rs b/tests/all/manifest.rs index 1f202a2..e5465f6 100644 --- a/tests/all/manifest.rs +++ b/tests/all/manifest.rs @@ -369,6 +369,63 @@ fn it_sets_homepage_field_if_available_in_cargo_toml() { assert_eq!(pkg.homepage, None); } +#[test] +fn it_sets_keywords_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" + keywords = ["wasm"] + + [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, None).unwrap(); + + wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + crate_data + .write_package_json(&out_dir, &None, true, Target::Bundler) + .unwrap(); + + let pkg = utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap(); + let keywords = pkg.keywords.clone().unwrap(); + assert!( + keywords.contains(&"wasm".to_string()), + "keywords is not in files: {:?}", + keywords, + ); + + // When 'keywords' is unavailable + let fixture = fixture::js_hello_world(); + let out_dir = fixture.path.join("pkg"); + let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); + + wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + crate_data + .write_package_json(&out_dir, &None, true, Target::Bundler) + .unwrap(); + + let pkg = utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap(); + assert_eq!(pkg.keywords, None); +} + #[test] fn it_does_not_error_when_wasm_bindgen_is_declared() { let fixture = fixture::js_hello_world(); diff --git a/tests/all/utils/manifest.rs b/tests/all/utils/manifest.rs index 1ff18a2..c261bc1 100644 --- a/tests/all/utils/manifest.rs +++ b/tests/all/utils/manifest.rs @@ -24,6 +24,7 @@ pub struct NpmPackage { #[serde(default = "default_false", rename = "sideEffects")] pub side_effects: bool, pub homepage: Option, + pub keywords: Option>, } fn default_none() -> String {