diff --git a/crates/cli-support/src/js/mod.rs b/crates/cli-support/src/js/mod.rs index 60a6b2a5..159b65ff 100644 --- a/crates/cli-support/src/js/mod.rs +++ b/crates/cli-support/src/js/mod.rs @@ -272,25 +272,46 @@ impl<'a> Context<'a> { // generates somthing like // ```js + // import * as import0 from './snippets/.../inline1.js'; + // ```, + // + // ```js // const imports = { // __wbindgen_placeholder__: { // __wbindgen_throw: function(..) { .. }, // .. - // } + // }, + // './snippets/deno-65e2634a84cc3c14/inline1.js': import0, // } // ``` - fn generate_deno_imports(&self) -> String { - let mut imports = "const imports = {\n".to_string(); - imports.push_str(&format!(" {}: {{\n", crate::PLACEHOLDER_MODULE)); + fn generate_deno_imports(&self) -> (String, String) { + let mut imports = String::new(); + let mut wasm_import_object = "const imports = {\n".to_string(); + + wasm_import_object.push_str(&format!(" {}: {{\n", crate::PLACEHOLDER_MODULE)); for (id, js) in crate::sorted_iter(&self.wasm_import_definitions) { let import = self.module.imports.get(*id); - imports.push_str(&format!("{}: {},\n", &import.name, js.trim())); + wasm_import_object.push_str(&format!("{}: {},\n", &import.name, js.trim())); } - imports.push_str("\t}\n};\n\n"); + wasm_import_object.push_str("\t},\n"); - imports + // e.g. snippets without parameters + let import_modules = self + .module + .imports + .iter() + .map(|import| &import.module) + .filter(|module| module.as_str() != PLACEHOLDER_MODULE); + for (i, module) in import_modules.enumerate() { + imports.push_str(&format!("import * as import{} from '{}'\n", i, module)); + wasm_import_object.push_str(&format!(" '{}': import{},", module, i)) + } + + wasm_import_object.push_str("\n};\n\n"); + + (imports, wasm_import_object) } fn generate_deno_wasm_loading(&self, module_name: &str) -> String { @@ -369,7 +390,10 @@ impl<'a> Context<'a> { } OutputMode::Deno => { - footer.push_str(&self.generate_deno_imports()); + let (js_imports, wasm_import_object) = self.generate_deno_imports(); + imports.push_str(&js_imports); + footer.push_str(&wasm_import_object); + footer.push_str(&self.generate_deno_wasm_loading(module_name)); if needs_manual_start { diff --git a/examples/deno/src/lib.rs b/examples/deno/src/lib.rs index bee2ec64..31a035de 100644 --- a/examples/deno/src/lib.rs +++ b/examples/deno/src/lib.rs @@ -26,6 +26,10 @@ extern "C" { extern "C" { fn add(a: u32, b: u32) -> u32; } +#[wasm_bindgen(inline_js = "export function test() {}")] +extern "C" { + fn test(); +} #[wasm_bindgen] pub fn greet(name: String) { @@ -33,5 +37,6 @@ pub fn greet(name: String) { let x = MyClass::new(); assert_eq!(x.number(), add(40, 2)); + test(); log(&x.render()); }