diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/lib.rs | 51 | ||||
-rw-r--r-- | cli/ops/workers.rs | 2 | ||||
-rw-r--r-- | cli/worker.rs | 25 |
3 files changed, 46 insertions, 32 deletions
diff --git a/cli/lib.rs b/cli/lib.rs index 3c093cda4..5e416c6ac 100644 --- a/cli/lib.rs +++ b/cli/lib.rs @@ -241,7 +241,7 @@ fn info_command(flags: DenoFlags, argv: Vec<String>) { debug!("main_module {}", main_module); worker - .execute_mod_async(&main_module, true) + .execute_mod_async(&main_module, None, true) .map_err(print_err_and_exit) .and_then(move |()| print_file_info(worker, &main_module)) .and_then(|worker| { @@ -263,36 +263,41 @@ fn fetch_command(flags: DenoFlags, argv: Vec<String>) { js_check(worker.execute("denoMain()")); debug!("main_module {}", main_module); - worker.execute_mod_async(&main_module, true).then(|result| { - js_check(result); - Ok(()) - }) + worker + .execute_mod_async(&main_module, None, true) + .then(|result| { + js_check(result); + Ok(()) + }) }); tokio_util::run(main_future); } fn eval_command(flags: DenoFlags, argv: Vec<String>) { let (mut worker, state) = create_worker_and_state(flags, argv); - // Wrap provided script in async function so asynchronous methods - // work. This is required until top-level await is not supported. - let js_source = format!( - "async function _topLevelWrapper(){{ - {} - }} - _topLevelWrapper(); - ", - &state.argv[1] - ); + let ts_source = state.argv[1].clone(); + // Force TypeScript compile. + let main_module = + ModuleSpecifier::resolve_url_or_path("./__$deno$eval.ts").unwrap(); let main_future = lazy(move || { js_check(worker.execute("denoMain()")); - // ATM imports in `deno eval` are not allowed - // TODO Support ES modules once Worker supports evaluating anonymous modules. - js_check(worker.execute(&js_source)); - worker.then(|result| { - js_check(result); - Ok(()) - }) + debug!("main_module {}", &main_module); + + let mut worker_ = worker.clone(); + worker + .execute_mod_async(&main_module, Some(ts_source), false) + .and_then(move |()| { + js_check(worker.execute("window.dispatchEvent(new Event('load'))")); + worker.then(move |result| { + js_check(result); + js_check( + worker_.execute("window.dispatchEvent(new Event('unload'))"), + ); + Ok(()) + }) + }) + .map_err(print_err_and_exit) }); tokio_util::run(main_future); } @@ -356,7 +361,7 @@ fn run_script(flags: DenoFlags, argv: Vec<String>) { let mut worker_ = worker.clone(); worker - .execute_mod_async(&main_module, false) + .execute_mod_async(&main_module, None, false) .and_then(move |()| { js_check(worker.execute("window.dispatchEvent(new Event('load'))")); worker.then(move |result| { diff --git a/cli/ops/workers.rs b/cli/ops/workers.rs index c8c4252c3..670ca6b47 100644 --- a/cli/ops/workers.rs +++ b/cli/ops/workers.rs @@ -172,7 +172,7 @@ fn op_create_worker( } let op = worker - .execute_mod_async(&module_specifier, false) + .execute_mod_async(&module_specifier, None, false) .and_then(move |()| Ok(exec_cb(worker))); let result = op.wait()?; diff --git a/cli/worker.rs b/cli/worker.rs index 990dd613a..1091164c7 100644 --- a/cli/worker.rs +++ b/cli/worker.rs @@ -91,15 +91,20 @@ impl Worker { pub fn execute_mod_async( &mut self, module_specifier: &ModuleSpecifier, + maybe_code: Option<String>, is_prefetch: bool, ) -> impl Future<Item = (), Error = ErrBox> { let worker = self.clone(); let loader = self.state.clone(); let isolate = self.isolate.clone(); let modules = self.state.modules.clone(); - let recursive_load = - RecursiveLoad::main(&module_specifier.to_string(), loader, modules) - .get_future(isolate); + let recursive_load = RecursiveLoad::main( + &module_specifier.to_string(), + maybe_code, + loader, + modules, + ) + .get_future(isolate); recursive_load.and_then(move |id| -> Result<(), ErrBox> { worker.state.progress.done(); if is_prefetch { @@ -156,7 +161,7 @@ mod tests { let mut worker = Worker::new("TEST".to_string(), StartupData::None, state); worker - .execute_mod_async(&module_specifier, false) + .execute_mod_async(&module_specifier, None, false) .then(|result| { if let Err(err) = result { eprintln!("execute_mod err {:?}", err); @@ -193,7 +198,7 @@ mod tests { let mut worker = Worker::new("TEST".to_string(), StartupData::None, state); worker - .execute_mod_async(&module_specifier, false) + .execute_mod_async(&module_specifier, None, false) .then(|result| { if let Err(err) = result { eprintln!("execute_mod err {:?}", err); @@ -233,7 +238,7 @@ mod tests { ); worker.execute("denoMain()").unwrap(); worker - .execute_mod_async(&module_specifier, false) + .execute_mod_async(&module_specifier, None, false) .then(|result| { if let Err(err) = result { eprintln!("execute_mod err {:?}", err); @@ -354,7 +359,9 @@ mod tests { let mut worker = create_test_worker(); let module_specifier = ModuleSpecifier::resolve_url_or_path("does-not-exist").unwrap(); - let result = worker.execute_mod_async(&module_specifier, false).wait(); + let result = worker + .execute_mod_async(&module_specifier, None, false) + .wait(); assert!(result.is_err()); }) } @@ -372,7 +379,9 @@ mod tests { .to_owned(); let module_specifier = ModuleSpecifier::resolve_url_or_path(&p.to_string_lossy()).unwrap(); - let result = worker.execute_mod_async(&module_specifier, false).wait(); + let result = worker + .execute_mod_async(&module_specifier, None, false) + .wait(); assert!(result.is_ok()); }) } |