diff options
Diffstat (limited to 'cli/worker.rs')
-rw-r--r-- | cli/worker.rs | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/cli/worker.rs b/cli/worker.rs index fa04d5a8f..bfcc1afdc 100644 --- a/cli/worker.rs +++ b/cli/worker.rs @@ -5,6 +5,7 @@ use crate::state::State; use deno_core; use deno_core::Buf; use deno_core::ErrBox; +use deno_core::ModuleId; use deno_core::ModuleSpecifier; use deno_core::StartupData; use futures::channel::mpsc; @@ -137,20 +138,35 @@ impl Worker { self.isolate.execute(js_filename, js_source) } - /// Executes the provided JavaScript module. - pub async fn execute_mod_async( + /// Loads and instantiates specified JavaScript module. + pub async fn preload_module( + &mut self, + module_specifier: &ModuleSpecifier, + ) -> Result<ModuleId, ErrBox> { + self.isolate.load_module(module_specifier, None).await + } + + /// Loads, instantiates and executes specified JavaScript module. + pub async fn execute_module( &mut self, module_specifier: &ModuleSpecifier, - maybe_code: Option<String>, - is_prefetch: bool, ) -> Result<(), ErrBox> { - let specifier = module_specifier.to_string(); - let id = self.isolate.load_module(&specifier, maybe_code).await?; - self.state.borrow().global_state.progress.done(); - if !is_prefetch { - return self.isolate.mod_evaluate(id); - } - Ok(()) + let id = self.preload_module(module_specifier).await?; + self.isolate.mod_evaluate(id) + } + + /// Loads, instantiates and executes provided source code + /// as module. + pub async fn execute_module_from_code( + &mut self, + module_specifier: &ModuleSpecifier, + code: String, + ) -> Result<(), ErrBox> { + let id = self + .isolate + .load_module(module_specifier, Some(code)) + .await?; + self.isolate.mod_evaluate(id) } /// Returns a way to communicate with the Worker from other threads. @@ -256,9 +272,7 @@ mod tests { tokio_util::run_basic(async move { let mut worker = MainWorker::new("TEST".to_string(), StartupData::None, state); - let result = worker - .execute_mod_async(&module_specifier, None, false) - .await; + let result = worker.execute_module(&module_specifier).await; if let Err(err) = result { eprintln!("execute_mod err {:?}", err); } @@ -287,9 +301,7 @@ mod tests { tokio_util::run_basic(async move { let mut worker = MainWorker::new("TEST".to_string(), StartupData::None, state); - let result = worker - .execute_mod_async(&module_specifier, None, false) - .await; + let result = worker.execute_module(&module_specifier).await; if let Err(err) = result { eprintln!("execute_mod err {:?}", err); } @@ -329,9 +341,7 @@ mod tests { state.clone(), ); worker.execute("bootstrapMainRuntime()").unwrap(); - let result = worker - .execute_mod_async(&module_specifier, None, false) - .await; + let result = worker.execute_module(&module_specifier).await; if let Err(err) = result { eprintln!("execute_mod err {:?}", err); } @@ -363,8 +373,7 @@ mod tests { let mut worker = create_test_worker(); let module_specifier = ModuleSpecifier::resolve_url_or_path("does-not-exist").unwrap(); - let result = - block_on(worker.execute_mod_async(&module_specifier, None, false)); + let result = block_on(worker.execute_module(&module_specifier)); assert!(result.is_err()); }) } @@ -381,8 +390,7 @@ mod tests { .join("cli/tests/002_hello.ts"); let module_specifier = ModuleSpecifier::resolve_url_or_path(&p.to_string_lossy()).unwrap(); - let result = - block_on(worker.execute_mod_async(&module_specifier, None, false)); + let result = block_on(worker.execute_module(&module_specifier)); assert!(result.is_ok()); }) } |