diff --git a/src/command/build.rs b/src/command/build.rs index 11d3ab98..6e3ae558 100644 --- a/src/command/build.rs +++ b/src/command/build.rs @@ -41,6 +41,7 @@ pub struct Build { pub bindgen: Option, pub cache: Cache, pub extra_options: Vec, + pub private: bool, } /// What sort of output we're going to be generating and flags we're invoking @@ -184,6 +185,10 @@ pub struct BuildOptions { /// List of extra options to pass to `cargo build` pub extra_options: Vec, + + #[clap(long)] + /// Whether the generated package.json should be marked as private + pub private: bool, } impl Default for BuildOptions { @@ -206,6 +211,7 @@ impl Default for BuildOptions { out_dir: String::new(), out_name: None, extra_options: Vec::new(), + private: false, } } } @@ -260,6 +266,7 @@ impl Build { bindgen: None, cache: cache::get_wasm_pack_cache()?, extra_options: build_opts.extra_options, + private: build_opts.private, }) } @@ -394,6 +401,7 @@ impl Build { &self.scope, self.disable_dts, self.target, + self.private, )?; info!( "Wrote a package.json at {:#?}.", diff --git a/src/manifest/mod.rs b/src/manifest/mod.rs index bf715a81..f473358f 100644 --- a/src/manifest/mod.rs +++ b/src/manifest/mod.rs @@ -623,6 +623,7 @@ impl CrateData { scope: &Option, disable_dts: bool, target: Target, + private: bool, ) -> Result<()> { let pkg_file_path = out_dir.join("package.json"); // Check if a `package.json` was already generated by wasm-bindgen, if so @@ -635,11 +636,16 @@ impl CrateData { } else { None }; + let private = if private { Some(true) } else { None }; let npm_data = match target { - Target::Nodejs => self.to_commonjs(scope, disable_dts, existing_deps, out_dir), - Target::NoModules => self.to_nomodules(scope, disable_dts, existing_deps, out_dir), - Target::Bundler => self.to_esmodules(scope, disable_dts, existing_deps, out_dir), - Target::Web => self.to_web(scope, disable_dts, existing_deps, out_dir), + Target::Nodejs => self.to_commonjs(scope, disable_dts, existing_deps, out_dir, private), + Target::NoModules => { + self.to_nomodules(scope, disable_dts, existing_deps, out_dir, private) + } + Target::Bundler => { + self.to_esmodules(scope, disable_dts, existing_deps, out_dir, private) + } + Target::Web => self.to_web(scope, disable_dts, existing_deps, out_dir, private), // Deno does not need package.json Target::Deno => return Ok(()), }; @@ -726,6 +732,7 @@ impl CrateData { disable_dts: bool, dependencies: Option>, out_dir: &Path, + private: Option, ) -> NpmPackage { let data = self.npm_data(scope, false, disable_dts, out_dir); let pkg = &self.data.packages[self.current_idx]; @@ -734,6 +741,7 @@ impl CrateData { NpmPackage::CommonJSPackage(CommonJSPackage { name: data.name, + private, collaborators: pkg.authors.clone(), description: self.pkg().description.clone(), version: pkg.version.to_string(), @@ -757,6 +765,7 @@ impl CrateData { disable_dts: bool, dependencies: Option>, out_dir: &Path, + private: Option, ) -> NpmPackage { let data = self.npm_data(scope, true, disable_dts, out_dir); let pkg = &self.data.packages[self.current_idx]; @@ -765,6 +774,7 @@ impl CrateData { NpmPackage::ESModulesPackage(ESModulesPackage { name: data.name, + private, ty: "module".into(), collaborators: pkg.authors.clone(), description: self.pkg().description.clone(), @@ -790,6 +800,7 @@ impl CrateData { disable_dts: bool, dependencies: Option>, out_dir: &Path, + private: Option, ) -> NpmPackage { let data = self.npm_data(scope, false, disable_dts, out_dir); let pkg = &self.data.packages[self.current_idx]; @@ -798,6 +809,7 @@ impl CrateData { NpmPackage::ESModulesPackage(ESModulesPackage { name: data.name, + private, ty: "module".into(), collaborators: pkg.authors.clone(), description: self.pkg().description.clone(), @@ -823,6 +835,7 @@ impl CrateData { disable_dts: bool, dependencies: Option>, out_dir: &Path, + private: Option, ) -> NpmPackage { let data = self.npm_data(scope, false, disable_dts, out_dir); let pkg = &self.data.packages[self.current_idx]; @@ -831,6 +844,7 @@ impl CrateData { NpmPackage::NoModulesPackage(NoModulesPackage { name: data.name, + private, collaborators: pkg.authors.clone(), description: self.pkg().description.clone(), version: pkg.version.to_string(), diff --git a/src/manifest/npm/commonjs.rs b/src/manifest/npm/commonjs.rs index 29433ad8..9e9373d8 100644 --- a/src/manifest/npm/commonjs.rs +++ b/src/manifest/npm/commonjs.rs @@ -5,6 +5,8 @@ use crate::manifest::npm::repository::Repository; #[derive(Serialize)] pub struct CommonJSPackage { pub name: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub private: Option, #[serde(skip_serializing_if = "Vec::is_empty")] pub collaborators: Vec, #[serde(skip_serializing_if = "Option::is_none")] diff --git a/src/manifest/npm/esmodules.rs b/src/manifest/npm/esmodules.rs index 0ee0af96..cd11167b 100644 --- a/src/manifest/npm/esmodules.rs +++ b/src/manifest/npm/esmodules.rs @@ -5,6 +5,8 @@ use crate::manifest::npm::repository::Repository; #[derive(Serialize)] pub struct ESModulesPackage { pub name: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub private: Option, #[serde(rename = "type")] pub ty: String, #[serde(skip_serializing_if = "Vec::is_empty")] diff --git a/src/manifest/npm/nomodules.rs b/src/manifest/npm/nomodules.rs index ed2e0167..3b503fe4 100644 --- a/src/manifest/npm/nomodules.rs +++ b/src/manifest/npm/nomodules.rs @@ -5,6 +5,8 @@ use crate::manifest::npm::repository::Repository; #[derive(Serialize)] pub struct NoModulesPackage { pub name: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub private: Option, #[serde(skip_serializing_if = "Vec::is_empty")] pub collaborators: Vec, #[serde(skip_serializing_if = "Option::is_none")] diff --git a/tests/all/manifest.rs b/tests/all/manifest.rs index 8d4af2df..c71db24b 100644 --- a/tests/all/manifest.rs +++ b/tests/all/manifest.rs @@ -79,7 +79,7 @@ fn it_creates_a_package_json_default_path() { let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); assert!(crate_data - .write_package_json(&out_dir, &None, false, Target::Bundler) + .write_package_json(&out_dir, &None, false, Target::Bundler, false) .is_ok()); let package_json_path = &fixture.path.join("pkg").join("package.json"); fs::metadata(package_json_path).unwrap(); @@ -119,7 +119,7 @@ fn it_creates_a_package_json_provided_path() { let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); assert!(crate_data - .write_package_json(&out_dir, &None, false, Target::Bundler) + .write_package_json(&out_dir, &None, false, Target::Bundler, false) .is_ok()); let package_json_path = &fixture.path.join("pkg").join("package.json"); fs::metadata(package_json_path).unwrap(); @@ -149,7 +149,13 @@ fn it_creates_a_package_json_provided_path_with_scope() { let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); assert!(crate_data - .write_package_json(&out_dir, &Some("test".to_string()), false, Target::Bundler,) + .write_package_json( + &out_dir, + &Some("test".to_string()), + false, + Target::Bundler, + false + ) .is_ok()); let package_json_path = &fixture.path.join("pkg").join("package.json"); fs::metadata(package_json_path).unwrap(); @@ -179,7 +185,7 @@ fn it_creates_a_pkg_json_with_correct_files_on_node() { let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); assert!(crate_data - .write_package_json(&out_dir, &None, false, Target::Nodejs) + .write_package_json(&out_dir, &None, false, Target::Nodejs, false) .is_ok()); let package_json_path = &out_dir.join("package.json"); fs::metadata(package_json_path).unwrap(); @@ -213,7 +219,7 @@ fn it_creates_a_pkg_json_with_correct_files_on_nomodules() { let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); assert!(crate_data - .write_package_json(&out_dir, &None, false, Target::NoModules) + .write_package_json(&out_dir, &None, false, Target::NoModules, false) .is_ok()); let package_json_path = &out_dir.join("package.json"); fs::metadata(package_json_path).unwrap(); @@ -247,7 +253,7 @@ fn it_creates_a_package_json_with_correct_files_when_out_name_is_provided() { let crate_data = manifest::CrateData::new(&fixture.path, Some("index".to_owned())).unwrap(); wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); assert!(crate_data - .write_package_json(&out_dir, &None, false, Target::Bundler) + .write_package_json(&out_dir, &None, false, Target::Bundler, false) .is_ok()); let package_json_path = &fixture.path.join("pkg").join("package.json"); fs::metadata(package_json_path).unwrap(); @@ -280,7 +286,7 @@ fn it_creates_a_pkg_json_in_out_dir() { let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); assert!(crate_data - .write_package_json(&out_dir, &None, false, Target::Bundler) + .write_package_json(&out_dir, &None, false, Target::Bundler, false) .is_ok()); let package_json_path = &fixture.path.join(&out_dir).join("package.json"); @@ -295,7 +301,7 @@ fn it_creates_a_package_json_with_correct_keys_when_types_are_skipped() { let crate_data = manifest::CrateData::new(&fixture.path, None).unwrap(); wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); assert!(crate_data - .write_package_json(&out_dir, &None, true, Target::Bundler) + .write_package_json(&out_dir, &None, true, Target::Bundler, false) .is_ok()); let package_json_path = &out_dir.join("package.json"); fs::metadata(package_json_path).unwrap(); @@ -337,7 +343,7 @@ fn it_creates_a_package_json_with_npm_dependencies_provided_by_wasm_bindgen() { ) .unwrap(); assert!(crate_data - .write_package_json(&out_dir, &None, true, Target::Bundler) + .write_package_json(&out_dir, &None, true, Target::Bundler, false) .is_ok()); let package_json_path = &out_dir.join("package.json"); fs::metadata(package_json_path).unwrap(); @@ -409,7 +415,7 @@ fn it_sets_homepage_field_if_available_in_cargo_toml() { wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); crate_data - .write_package_json(&out_dir, &None, true, Target::Bundler) + .write_package_json(&out_dir, &None, true, Target::Bundler, false) .unwrap(); let pkg = utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap(); @@ -425,7 +431,7 @@ fn it_sets_homepage_field_if_available_in_cargo_toml() { wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); crate_data - .write_package_json(&out_dir, &None, true, Target::Bundler) + .write_package_json(&out_dir, &None, true, Target::Bundler, false) .unwrap(); let pkg = utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap(); @@ -464,7 +470,7 @@ fn it_sets_keywords_field_if_available_in_cargo_toml() { wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); crate_data - .write_package_json(&out_dir, &None, true, Target::Bundler) + .write_package_json(&out_dir, &None, true, Target::Bundler, false) .unwrap(); let pkg = utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap(); @@ -482,7 +488,7 @@ fn it_sets_keywords_field_if_available_in_cargo_toml() { wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); crate_data - .write_package_json(&out_dir, &None, true, Target::Bundler) + .write_package_json(&out_dir, &None, true, Target::Bundler, false) .unwrap(); let pkg = utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap(); @@ -581,7 +587,7 @@ fn it_lists_license_files_in_files_field_of_package_json() { wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); license::copy_from_crate(&crate_data, &fixture.path, &out_dir).unwrap(); crate_data - .write_package_json(&out_dir, &None, false, Target::Bundler) + .write_package_json(&out_dir, &None, false, Target::Bundler, false) .unwrap(); let package_json_path = &fixture.path.join("pkg").join("package.json");