summaryrefslogtreecommitdiff
path: root/cli/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lib.rs')
-rw-r--r--cli/lib.rs189
1 files changed, 92 insertions, 97 deletions
diff --git a/cli/lib.rs b/cli/lib.rs
index 3d772bb83..224789282 100644
--- a/cli/lib.rs
+++ b/cli/lib.rs
@@ -3,7 +3,6 @@
extern crate lazy_static;
#[macro_use]
extern crate log;
-#[macro_use]
extern crate futures;
#[macro_use]
extern crate serde_json;
@@ -65,12 +64,13 @@ use deno::ErrBox;
use deno::ModuleSpecifier;
use flags::DenoFlags;
use flags::DenoSubcommand;
-use futures::lazy;
-use futures::Future;
+use futures::future::FutureExt;
+use futures::future::TryFutureExt;
use log::Level;
use log::Metadata;
use log::Record;
use std::env;
+use std::future::Future;
static LOGGER: Logger = Logger;
@@ -175,7 +175,7 @@ fn print_cache_info(worker: Worker) {
pub fn print_file_info(
worker: Worker,
module_specifier: &ModuleSpecifier,
-) -> impl Future<Item = Worker, Error = ()> {
+) -> impl Future<Output = Result<Worker, ()>> {
let global_state_ = worker.state.global_state.clone();
let state_ = worker.state.clone();
let module_specifier_ = module_specifier.clone();
@@ -249,7 +249,7 @@ pub fn print_file_info(
colors::bold("deps:".to_string()),
);
}
- Ok(worker)
+ futures::future::ok(worker)
})
})
}
@@ -263,22 +263,22 @@ fn info_command(flags: DenoFlags, argv: Vec<String>) {
}
let main_module = state.main_module.as_ref().unwrap().clone();
- let main_future = lazy(move || {
- // Setup runtime.
- js_check(worker.execute("denoMain()"));
- debug!("main_module {}", main_module);
- worker
- .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| {
- worker.then(|result| {
- js_check(result);
- Ok(())
- })
+ // Setup runtime.
+ js_check(worker.execute("denoMain()"));
+ debug!("main_module {}", main_module);
+
+ let main_future = worker
+ .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| {
+ worker.then(|result| {
+ js_check(result);
+ futures::future::ok(())
})
- });
+ });
+
tokio_util::run(main_future);
}
@@ -286,18 +286,19 @@ fn fetch_command(flags: DenoFlags, argv: Vec<String>) {
let (mut worker, state) = create_worker_and_state(flags, argv.clone());
let main_module = state.main_module.as_ref().unwrap().clone();
- let main_future = lazy(move || {
- // Setup runtime.
- js_check(worker.execute("denoMain()"));
- debug!("main_module {}", main_module);
+ // Setup runtime.
+ js_check(worker.execute("denoMain()"));
+ debug!("main_module {}", main_module);
+
+ let main_future =
worker
.execute_mod_async(&main_module, None, true)
.then(|result| {
js_check(result);
- Ok(())
- })
- });
+ futures::future::ok(())
+ });
+
tokio_util::run(main_future);
}
@@ -308,25 +309,23 @@ fn eval_command(flags: DenoFlags, argv: Vec<String>) {
let main_module =
ModuleSpecifier::resolve_url_or_path("./__$deno$eval.ts").unwrap();
- let main_future = lazy(move || {
- js_check(worker.execute("denoMain()"));
- debug!("main_module {}", &main_module);
+ js_check(worker.execute("denoMain()"));
+ 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(())
- })
+ let mut worker_ = worker.clone();
+
+ let main_future = 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'))"));
+ futures::future::ok(())
})
- .map_err(print_err_and_exit)
- });
+ })
+ .map_err(print_err_and_exit);
+
tokio_util::run(main_future);
}
@@ -341,22 +340,20 @@ fn bundle_command(flags: DenoFlags, argv: Vec<String>) {
};
debug!(">>>>> bundle_async START");
// NOTE: we need to poll `worker` otherwise TS compiler worker won't run properly
- let main_future = lazy(move || {
- worker.then(move |result| {
- js_check(result);
- state
- .ts_compiler
- .bundle_async(state.clone(), main_module.to_string(), out_file)
- .map_err(|err| {
- debug!("diagnostics returned, exiting!");
- eprintln!("");
- print_err_and_exit(err);
- })
- .and_then(move |_| {
- debug!(">>>>> bundle_async END");
- Ok(())
- })
- })
+ let main_future = worker.then(move |result| {
+ js_check(result);
+ state
+ .ts_compiler
+ .bundle_async(state.clone(), main_module.to_string(), out_file)
+ .map_err(|err| {
+ debug!("diagnostics returned, exiting!");
+ eprintln!("");
+ print_err_and_exit(err);
+ })
+ .and_then(move |_| {
+ debug!(">>>>> bundle_async END");
+ futures::future::ok(())
+ })
});
tokio_util::run(main_future);
}
@@ -365,16 +362,15 @@ fn run_repl(flags: DenoFlags, argv: Vec<String>) {
let (mut worker, _state) = create_worker_and_state(flags, argv);
// REPL situation.
- let main_future = lazy(move || {
- // Setup runtime.
- js_check(worker.execute("denoMain()"));
- worker
- .then(|result| {
- js_check(result);
- Ok(())
- })
- .map_err(|(err, _worker): (ErrBox, Worker)| print_err_and_exit(err))
- });
+
+ // Setup runtime.
+ js_check(worker.execute("denoMain()"));
+ let main_future = worker
+ .then(|result| {
+ js_check(result);
+ futures::future::ok(())
+ })
+ .map_err(|(err, _worker): (ErrBox, Worker)| print_err_and_exit(err));
tokio_util::run(main_future);
}
@@ -384,39 +380,38 @@ fn run_script(flags: DenoFlags, argv: Vec<String>) {
let main_module = state.main_module.as_ref().unwrap().clone();
// Normal situation of executing a module.
- let main_future = lazy(move || {
- // Setup runtime.
- js_check(worker.execute("denoMain()"));
- debug!("main_module {}", main_module);
- let mut worker_ = worker.clone();
+ // Setup runtime.
+ js_check(worker.execute("denoMain()"));
+ debug!("main_module {}", main_module);
- worker
- .execute_mod_async(&main_module, None, false)
- .and_then(move |()| {
- if state.flags.lock_write {
- if let Some(ref lockfile) = state.lockfile {
- let g = lockfile.lock().unwrap();
- g.write()?;
- } else {
- eprintln!("--lock flag must be specified when using --lock-write");
- std::process::exit(11);
+ let mut worker_ = worker.clone();
+
+ let main_future = worker
+ .execute_mod_async(&main_module, None, false)
+ .and_then(move |()| {
+ if state.flags.lock_write {
+ if let Some(ref lockfile) = state.lockfile {
+ let g = lockfile.lock().unwrap();
+ if let Err(e) = g.write() {
+ return futures::future::err(ErrBox::from(e));
}
+ } else {
+ eprintln!("--lock flag must be specified when using --lock-write");
+ std::process::exit(11);
}
- Ok(())
- })
- .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(())
- })
+ }
+ futures::future::ok(())
+ })
+ .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'))"));
+ futures::future::ok(())
})
- .map_err(print_err_and_exit)
- });
+ })
+ .map_err(print_err_and_exit);
if use_current_thread {
tokio_util::run_on_current_thread(main_future);