diff options
Diffstat (limited to 'cli/lib.rs')
-rw-r--r-- | cli/lib.rs | 189 |
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); |