summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/lib.rs51
-rw-r--r--cli/ops/workers.rs2
-rw-r--r--cli/worker.rs25
3 files changed, 46 insertions, 32 deletions
diff --git a/cli/lib.rs b/cli/lib.rs
index 3c093cda4..5e416c6ac 100644
--- a/cli/lib.rs
+++ b/cli/lib.rs
@@ -241,7 +241,7 @@ fn info_command(flags: DenoFlags, argv: Vec<String>) {
debug!("main_module {}", main_module);
worker
- .execute_mod_async(&main_module, true)
+ .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| {
@@ -263,36 +263,41 @@ fn fetch_command(flags: DenoFlags, argv: Vec<String>) {
js_check(worker.execute("denoMain()"));
debug!("main_module {}", main_module);
- worker.execute_mod_async(&main_module, true).then(|result| {
- js_check(result);
- Ok(())
- })
+ worker
+ .execute_mod_async(&main_module, None, true)
+ .then(|result| {
+ js_check(result);
+ Ok(())
+ })
});
tokio_util::run(main_future);
}
fn eval_command(flags: DenoFlags, argv: Vec<String>) {
let (mut worker, state) = create_worker_and_state(flags, argv);
- // Wrap provided script in async function so asynchronous methods
- // work. This is required until top-level await is not supported.
- let js_source = format!(
- "async function _topLevelWrapper(){{
- {}
- }}
- _topLevelWrapper();
- ",
- &state.argv[1]
- );
+ let ts_source = state.argv[1].clone();
+ // Force TypeScript compile.
+ let main_module =
+ ModuleSpecifier::resolve_url_or_path("./__$deno$eval.ts").unwrap();
let main_future = lazy(move || {
js_check(worker.execute("denoMain()"));
- // ATM imports in `deno eval` are not allowed
- // TODO Support ES modules once Worker supports evaluating anonymous modules.
- js_check(worker.execute(&js_source));
- worker.then(|result| {
- js_check(result);
- Ok(())
- })
+ 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(())
+ })
+ })
+ .map_err(print_err_and_exit)
});
tokio_util::run(main_future);
}
@@ -356,7 +361,7 @@ fn run_script(flags: DenoFlags, argv: Vec<String>) {
let mut worker_ = worker.clone();
worker
- .execute_mod_async(&main_module, false)
+ .execute_mod_async(&main_module, None, false)
.and_then(move |()| {
js_check(worker.execute("window.dispatchEvent(new Event('load'))"));
worker.then(move |result| {
diff --git a/cli/ops/workers.rs b/cli/ops/workers.rs
index c8c4252c3..670ca6b47 100644
--- a/cli/ops/workers.rs
+++ b/cli/ops/workers.rs
@@ -172,7 +172,7 @@ fn op_create_worker(
}
let op = worker
- .execute_mod_async(&module_specifier, false)
+ .execute_mod_async(&module_specifier, None, false)
.and_then(move |()| Ok(exec_cb(worker)));
let result = op.wait()?;
diff --git a/cli/worker.rs b/cli/worker.rs
index 990dd613a..1091164c7 100644
--- a/cli/worker.rs
+++ b/cli/worker.rs
@@ -91,15 +91,20 @@ impl Worker {
pub fn execute_mod_async(
&mut self,
module_specifier: &ModuleSpecifier,
+ maybe_code: Option<String>,
is_prefetch: bool,
) -> impl Future<Item = (), Error = ErrBox> {
let worker = self.clone();
let loader = self.state.clone();
let isolate = self.isolate.clone();
let modules = self.state.modules.clone();
- let recursive_load =
- RecursiveLoad::main(&module_specifier.to_string(), loader, modules)
- .get_future(isolate);
+ let recursive_load = RecursiveLoad::main(
+ &module_specifier.to_string(),
+ maybe_code,
+ loader,
+ modules,
+ )
+ .get_future(isolate);
recursive_load.and_then(move |id| -> Result<(), ErrBox> {
worker.state.progress.done();
if is_prefetch {
@@ -156,7 +161,7 @@ mod tests {
let mut worker =
Worker::new("TEST".to_string(), StartupData::None, state);
worker
- .execute_mod_async(&module_specifier, false)
+ .execute_mod_async(&module_specifier, None, false)
.then(|result| {
if let Err(err) = result {
eprintln!("execute_mod err {:?}", err);
@@ -193,7 +198,7 @@ mod tests {
let mut worker =
Worker::new("TEST".to_string(), StartupData::None, state);
worker
- .execute_mod_async(&module_specifier, false)
+ .execute_mod_async(&module_specifier, None, false)
.then(|result| {
if let Err(err) = result {
eprintln!("execute_mod err {:?}", err);
@@ -233,7 +238,7 @@ mod tests {
);
worker.execute("denoMain()").unwrap();
worker
- .execute_mod_async(&module_specifier, false)
+ .execute_mod_async(&module_specifier, None, false)
.then(|result| {
if let Err(err) = result {
eprintln!("execute_mod err {:?}", err);
@@ -354,7 +359,9 @@ mod tests {
let mut worker = create_test_worker();
let module_specifier =
ModuleSpecifier::resolve_url_or_path("does-not-exist").unwrap();
- let result = worker.execute_mod_async(&module_specifier, false).wait();
+ let result = worker
+ .execute_mod_async(&module_specifier, None, false)
+ .wait();
assert!(result.is_err());
})
}
@@ -372,7 +379,9 @@ mod tests {
.to_owned();
let module_specifier =
ModuleSpecifier::resolve_url_or_path(&p.to_string_lossy()).unwrap();
- let result = worker.execute_mod_async(&module_specifier, false).wait();
+ let result = worker
+ .execute_mod_async(&module_specifier, None, false)
+ .wait();
assert!(result.is_ok());
})
}