diff options
author | Kevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com> | 2019-08-06 06:22:11 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-08-06 09:22:11 -0400 |
commit | ccee2f01ba2f6304720ab17e99dee17bf6687bd8 (patch) | |
tree | df04bd385c05e13b6a835fc4955cd5eac2c7c582 /cli/ops.rs | |
parent | 11c850af423f07769f054c494a76cbd9efb8806c (diff) |
Implement Blob url support for worker (#2729)
Diffstat (limited to 'cli/ops.rs')
-rw-r--r-- | cli/ops.rs | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/cli/ops.rs b/cli/ops.rs index 410f15a4c..6f98c82bc 100644 --- a/cli/ops.rs +++ b/cli/ops.rs @@ -2075,6 +2075,8 @@ fn op_create_worker( // has included namespace (to avoid escalation). let include_deno_namespace = inner.include_deno_namespace() && state.include_deno_namespace; + let has_source_code = inner.has_source_code(); + let source_code = inner.source_code().unwrap(); let parent_state = state.clone(); @@ -2094,29 +2096,34 @@ fn op_create_worker( worker.execute(&deno_main_call).unwrap(); worker.execute("workerMain()").unwrap(); + let exec_cb = move |worker: Worker| { + let mut workers_tl = parent_state.workers.lock().unwrap(); + workers_tl.insert(rid, worker.shared()); + let builder = &mut FlatBufferBuilder::new(); + let msg_inner = + msg::CreateWorkerRes::create(builder, &msg::CreateWorkerResArgs { rid }); + serialize_response( + cmd_id, + builder, + msg::BaseArgs { + inner: Some(msg_inner.as_union_value()), + inner_type: msg::Any::CreateWorkerRes, + ..Default::default() + }, + ) + }; + + // Has provided source code, execute immediately. + if has_source_code { + worker.execute(&source_code).unwrap(); + return ok_buf(exec_cb(worker)); + } + let module_specifier = ModuleSpecifier::resolve_url_or_path(specifier)?; - let op = - worker - .execute_mod_async(&module_specifier, false) - .and_then(move |()| { - let mut workers_tl = parent_state.workers.lock().unwrap(); - workers_tl.insert(rid, worker.shared()); - let builder = &mut FlatBufferBuilder::new(); - let msg_inner = msg::CreateWorkerRes::create( - builder, - &msg::CreateWorkerResArgs { rid }, - ); - Ok(serialize_response( - cmd_id, - builder, - msg::BaseArgs { - inner: Some(msg_inner.as_union_value()), - inner_type: msg::Any::CreateWorkerRes, - ..Default::default() - }, - )) - }); + let op = worker + .execute_mod_async(&module_specifier, false) + .and_then(move |()| Ok(exec_cb(worker))); let result = op.wait()?; Ok(Op::Sync(result)) |