diff --git a/docs/src/cargo-toml-configuration.md b/docs/src/cargo-toml-configuration.md index 613cc655..c638e9ac 100644 --- a/docs/src/cargo-toml-configuration.md +++ b/docs/src/cargo-toml-configuration.md @@ -29,6 +29,8 @@ demangle-name-section = true dwarf-debug-info = false # Should we omit the default import path? omit-default-module-path = false +# Controls whether wasm-bindgen will split linked modules out into their own files. Enabling this is recommended, because it allows lazy-loading the linked modules and setting a stricter Content Security Policy. Only available in wasm-bindgen 0.2.95 and later. +split-linked-modules = false [package.metadata.wasm-pack.profile.profiling] wasm-opt = ['-O'] diff --git a/src/bindgen.rs b/src/bindgen.rs index e57d2e4f..1c0f9e9a 100644 --- a/src/bindgen.rs +++ b/src/bindgen.rs @@ -92,6 +92,9 @@ pub fn wasm_bindgen_build( if profile.wasm_bindgen_omit_default_module_path() { cmd.arg("--omit-default-module-path"); } + if profile.wasm_bindgen_split_linked_modules() { + cmd.arg("--split-linked-modules"); + } child::run(cmd, "wasm-bindgen").context("Running the wasm-bindgen CLI")?; Ok(()) diff --git a/src/manifest/mod.rs b/src/manifest/mod.rs index 00b36c7b..bf715a81 100644 --- a/src/manifest/mod.rs +++ b/src/manifest/mod.rs @@ -127,6 +127,9 @@ struct CargoWasmPackProfileWasmBindgen { #[serde(default, rename = "omit-default-module-path")] omit_default_module_path: Option, + + #[serde(default, rename = "split-linked-modules")] + split_linked_modules: Option, } /// Struct for storing information received from crates.io @@ -283,6 +286,7 @@ impl CargoWasmPackProfile { demangle_name_section: Some(true), dwarf_debug_info: Some(false), omit_default_module_path: Some(false), + split_linked_modules: Some(false), }, wasm_opt: None, } @@ -295,6 +299,7 @@ impl CargoWasmPackProfile { demangle_name_section: Some(true), dwarf_debug_info: Some(false), omit_default_module_path: Some(false), + split_linked_modules: Some(false), }, wasm_opt: Some(CargoWasmPackProfileWasmOpt::Enabled(true)), } @@ -307,6 +312,7 @@ impl CargoWasmPackProfile { demangle_name_section: Some(true), dwarf_debug_info: Some(false), omit_default_module_path: Some(false), + split_linked_modules: Some(false), }, wasm_opt: Some(CargoWasmPackProfileWasmOpt::Enabled(true)), } @@ -319,6 +325,7 @@ impl CargoWasmPackProfile { demangle_name_section: Some(true), dwarf_debug_info: Some(false), omit_default_module_path: Some(false), + split_linked_modules: Some(false), }, wasm_opt: Some(CargoWasmPackProfileWasmOpt::Enabled(true)), } @@ -370,6 +377,7 @@ impl CargoWasmPackProfile { d!(wasm_bindgen.demangle_name_section); d!(wasm_bindgen.dwarf_debug_info); d!(wasm_bindgen.omit_default_module_path); + d!(wasm_bindgen.split_linked_modules); if self.wasm_opt.is_none() { self.wasm_opt = defaults.wasm_opt.clone(); @@ -396,6 +404,11 @@ impl CargoWasmPackProfile { self.wasm_bindgen.omit_default_module_path.unwrap() } + /// Get this profile's configured `[wasm-bindgen.split-linked-modules]` value. + pub fn wasm_bindgen_split_linked_modules(&self) -> bool { + self.wasm_bindgen.split_linked_modules.unwrap() + } + /// Get this profile's configured arguments for `wasm-opt`, if enabled. pub fn wasm_opt_args(&self) -> Option> { match self.wasm_opt.as_ref()? {