summaryrefslogtreecommitdiff
path: root/cli/isolate.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/isolate.rs')
-rw-r--r--cli/isolate.rs40
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;