diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-01-21 17:50:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-21 17:50:06 +0100 |
commit | ecd1d3abb0cae9c7cbc1330cbaa035a5786e94d7 (patch) | |
tree | 73d4b12a06f5f6a6bc0e7168e0021efc3a2eda7c /cli/ops/runtime_compiler.rs | |
parent | 229eb292f83dedbc32dc24f912841caf79a53e9c (diff) |
refactor: split cli::Worker (#3735)
* cli::Worker is base struct to create specialized workers
* add MainWorker
* add CompilerWorker
* refactor WebWorker to use Worker
Diffstat (limited to 'cli/ops/runtime_compiler.rs')
-rw-r--r-- | cli/ops/runtime_compiler.rs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/cli/ops/runtime_compiler.rs b/cli/ops/runtime_compiler.rs new file mode 100644 index 000000000..4202f6b3c --- /dev/null +++ b/cli/ops/runtime_compiler.rs @@ -0,0 +1,56 @@ +// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. +use super::dispatch_json::{Deserialize, JsonOp, Value}; +use crate::compilers::runtime_compile_async; +use crate::compilers::runtime_transpile_async; +use crate::ops::json_op; +use crate::state::ThreadSafeState; +use deno_core::*; +use std::collections::HashMap; + +pub fn init(i: &mut Isolate, s: &ThreadSafeState) { + i.register_op("compile", s.core_op(json_op(s.stateful_op(op_compile)))); + i.register_op("transpile", s.core_op(json_op(s.stateful_op(op_transpile)))); +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +struct CompileArgs { + root_name: String, + sources: Option<HashMap<String, String>>, + bundle: bool, + options: Option<String>, +} + +fn op_compile( + state: &ThreadSafeState, + args: Value, + _zero_copy: Option<PinnedBuf>, +) -> Result<JsonOp, ErrBox> { + let args: CompileArgs = serde_json::from_value(args)?; + Ok(JsonOp::Async(runtime_compile_async( + state.global_state.clone(), + &args.root_name, + &args.sources, + args.bundle, + &args.options, + ))) +} + +#[derive(Deserialize, Debug)] +struct TranspileArgs { + sources: HashMap<String, String>, + options: Option<String>, +} + +fn op_transpile( + state: &ThreadSafeState, + args: Value, + _zero_copy: Option<PinnedBuf>, +) -> Result<JsonOp, ErrBox> { + let args: TranspileArgs = serde_json::from_value(args)?; + Ok(JsonOp::Async(runtime_transpile_async( + state.global_state.clone(), + &args.sources, + &args.options, + ))) +} |