diff options
Diffstat (limited to 'cli/isolate.rs')
-rw-r--r-- | cli/isolate.rs | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/cli/isolate.rs b/cli/isolate.rs index 50cafc6c9..d0c113da0 100644 --- a/cli/isolate.rs +++ b/cli/isolate.rs @@ -7,6 +7,7 @@ use crate::isolate_state::IsolateState; use crate::isolate_state::IsolateStateContainer; use crate::js_errors; use crate::msg; +use crate::tokio_util; use deno_core; use deno_core::deno_mod; use deno_core::Behavior; @@ -162,23 +163,39 @@ impl<B: DenoBehavior> Future for Isolate<B> { self.inner.poll().map_err(|err| self.apply_source_map(err)) } } +fn fetch_module_meta_data_and_maybe_compile_async( + state: &Arc<IsolateState>, + specifier: &str, + referrer: &str, +) -> impl Future<Item = ModuleMetaData, Error = DenoError> { + let state_ = state.clone(); + let specifier = specifier.to_string(); + let referrer = referrer.to_string(); + state + .dir + .fetch_module_meta_data_async(&specifier, &referrer) + .and_then(move |mut out| { + if (out.media_type == msg::MediaType::TypeScript + && out.maybe_output_code.is_none()) + || state_.flags.recompile + { + debug!(">>>>> compile_sync START"); + out = compile_sync(state_.clone(), &specifier, &referrer, &out); + debug!(">>>>> compile_sync END"); + state_.dir.code_cache(&out)?; + } + Ok(out) + }) +} fn fetch_module_meta_data_and_maybe_compile( state: &Arc<IsolateState>, specifier: &str, referrer: &str, ) -> Result<ModuleMetaData, DenoError> { - let mut out = state.dir.fetch_module_meta_data(specifier, referrer)?; - if (out.media_type == msg::MediaType::TypeScript - && out.maybe_output_code.is_none()) - || state.flags.recompile - { - debug!(">>>>> compile_sync START"); - out = compile_sync(state.clone(), specifier, &referrer, &out); - debug!(">>>>> compile_sync END"); - state.dir.code_cache(&out)?; - } - Ok(out) + tokio_util::block_on(fetch_module_meta_data_and_maybe_compile_async( + state, specifier, referrer, + )) } #[cfg(test)] @@ -186,7 +203,6 @@ mod tests { use super::*; use crate::cli_behavior::CliBehavior; use crate::flags; - use crate::tokio_util; use futures::future::lazy; use std::sync::atomic::Ordering; |