summaryrefslogtreecommitdiff
path: root/cli/ops.rs
diff options
context:
space:
mode:
authorKevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com>2019-08-06 06:22:11 -0700
committerRyan Dahl <ry@tinyclouds.org>2019-08-06 09:22:11 -0400
commitccee2f01ba2f6304720ab17e99dee17bf6687bd8 (patch)
treedf04bd385c05e13b6a835fc4955cd5eac2c7c582 /cli/ops.rs
parent11c850af423f07769f054c494a76cbd9efb8806c (diff)
Implement Blob url support for worker (#2729)
Diffstat (limited to 'cli/ops.rs')
-rw-r--r--cli/ops.rs49
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))