From b7a73e71c073df5fd6d3247ad12167c5f064ae07 Mon Sep 17 00:00:00 2001 From: Caio Date: Sun, 31 Mar 2019 19:01:42 -0300 Subject: [PATCH] Add TS type for init fn --- crates/cli-support/src/js/mod.rs | 17 +++++++++++++++-- crates/typescript-tests/run.sh | 7 +++++++ crates/typescript-tests/src/web/init.ts | 3 +++ crates/typescript-tests/tsconfig.json | 2 +- 4 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 crates/typescript-tests/src/web/init.ts diff --git a/crates/cli-support/src/js/mod.rs b/crates/cli-support/src/js/mod.rs index 4a9fabcd41f1..9747b4be5950 100644 --- a/crates/cli-support/src/js/mod.rs +++ b/crates/cli-support/src/js/mod.rs @@ -311,6 +311,7 @@ impl<'a> Context<'a> { /// `--target no-modules`, `--target web`, or for bundlers. This is the very /// last step performed in `finalize`. fn finalize_js(&mut self, module_name: &str, needs_manual_start: bool) -> (String, String) { + let mut ts = self.typescript.clone(); let mut js = String::new(); if self.config.mode.no_modules() { js.push_str("(function() {\n"); @@ -327,6 +328,7 @@ impl<'a> Context<'a> { js.push_str("const __exports = {};\n"); js.push_str("let wasm;\n"); init = self.gen_init(&module_name, needs_manual_start); + ts.push_str(Self::ts_for_init_fn()); self.footer.push_str(&format!( "self.{} = Object.assign(init, __exports);\n", global @@ -367,6 +369,7 @@ impl<'a> Context<'a> { js.push_str("const __exports = {};\n"); self.imports_post.push_str("let wasm;\n"); init = self.gen_init(&module_name, needs_manual_start); + ts.push_str(Self::ts_for_init_fn()); self.footer.push_str("export default init;\n"); } } @@ -394,7 +397,7 @@ impl<'a> Context<'a> { js = js.replace("\n\n\n", "\n\n"); } - (js, self.typescript.clone()) + (js, ts) } fn wire_up_initial_intrinsics(&mut self) -> Result<(), Error> { @@ -842,6 +845,16 @@ impl<'a> Context<'a> { Ok(()) } + fn ts_for_init_fn() -> &'static str { + "\n\ + /**\n\ + * @param {string} module_or_path\n\ + * @returns {Promise}\n\ + */\n\ + export function init(module_or_path: string): Promise; + " + } + fn gen_init(&mut self, module_name: &str, needs_manual_start: bool) -> String { let mem = self.module.memories.get(self.memory); let (init_memory1, init_memory2) = if mem.import.is_some() { @@ -865,7 +878,7 @@ impl<'a> Context<'a> { format!( "\ - function init(module_or_path, maybe_memory) {{ + function init(module_or_path) {{ let result; const imports = {{ './{module}': __exports }}; if (module_or_path instanceof URL || typeof module_or_path === 'string' || module_or_path instanceof Request) {{ diff --git a/crates/typescript-tests/run.sh b/crates/typescript-tests/run.sh index d6b033988a10..95a868a58e61 100755 --- a/crates/typescript-tests/run.sh +++ b/crates/typescript-tests/run.sh @@ -11,6 +11,13 @@ cargo run -p wasm-bindgen-cli --bin wasm-bindgen -- \ --out-dir pkg \ --typescript +mkdir pkg/web +cargo run -p wasm-bindgen-cli --bin wasm-bindgen -- \ + ../../target/wasm32-unknown-unknown/debug/typescript_tests.wasm \ + --out-dir pkg/web \ + --target web \ + --typescript + if [ ! -d node_modules ]; then npm install fi diff --git a/crates/typescript-tests/src/web/init.ts b/crates/typescript-tests/src/web/init.ts new file mode 100644 index 000000000000..623efe72704e --- /dev/null +++ b/crates/typescript-tests/src/web/init.ts @@ -0,0 +1,3 @@ +import * as wbg from '../../pkg/web/typescript_tests'; + +const init: Promise = wbg.init('.'); \ No newline at end of file diff --git a/crates/typescript-tests/tsconfig.json b/crates/typescript-tests/tsconfig.json index 9089297990a3..3032c028f840 100644 --- a/crates/typescript-tests/tsconfig.json +++ b/crates/typescript-tests/tsconfig.json @@ -9,6 +9,6 @@ "baseUrl": "." }, "include": [ - "src/*.ts" + "src/**/*.ts" ] }