fix deno import logic to include non-placeholder-module imports

This commit is contained in:
Jakob Hellermann 2020-06-03 22:30:27 +02:00
parent 84c7cf01ce
commit addb0824d1
2 changed files with 37 additions and 8 deletions

View File

@ -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 {

View File

@ -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());
}