mirror of
https://github.com/denoland/deno.git
synced 2025-09-30 06:04:48 +00:00
refactor: Remove cli::compilers module (#5138)
This PR removes "cli/compilers/" directory. "cli/compilers/ts.rs" has been renamed to "cli/tsc.rs"
This commit is contained in:
parent
6b73e0caff
commit
f9f10229a4
9 changed files with 70 additions and 129 deletions
|
@ -1,66 +0,0 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
|
||||||
use crate::ops;
|
|
||||||
use crate::state::State;
|
|
||||||
use crate::web_worker::WebWorker;
|
|
||||||
use core::task::Context;
|
|
||||||
use deno_core::ErrBox;
|
|
||||||
use deno_core::StartupData;
|
|
||||||
use futures::future::Future;
|
|
||||||
use futures::future::FutureExt;
|
|
||||||
use std::ops::Deref;
|
|
||||||
use std::ops::DerefMut;
|
|
||||||
use std::pin::Pin;
|
|
||||||
use std::task::Poll;
|
|
||||||
|
|
||||||
/// This worker is used to host TypeScript and WASM compilers.
|
|
||||||
///
|
|
||||||
/// It provides minimal set of ops that are necessary to facilitate
|
|
||||||
/// compilation.
|
|
||||||
///
|
|
||||||
/// NOTE: This worker is considered priveleged, because it may
|
|
||||||
/// access file system without permission check.
|
|
||||||
///
|
|
||||||
/// At the moment this worker is meant to be single-use - after
|
|
||||||
/// performing single compilation/bundling it should be destroyed.
|
|
||||||
///
|
|
||||||
/// TODO(bartlomieju): add support to reuse the worker - or in other
|
|
||||||
/// words support stateful TS compiler
|
|
||||||
pub struct CompilerWorker(WebWorker);
|
|
||||||
|
|
||||||
impl CompilerWorker {
|
|
||||||
pub fn new(name: String, startup_data: StartupData, state: State) -> Self {
|
|
||||||
let state_ = state.clone();
|
|
||||||
let mut worker = WebWorker::new(name, startup_data, state_, false);
|
|
||||||
{
|
|
||||||
let isolate = &mut worker.isolate;
|
|
||||||
ops::compiler::init(isolate, &state);
|
|
||||||
// TODO(bartlomieju): CompilerWorker should not
|
|
||||||
// depend on those ops
|
|
||||||
ops::os::init(isolate, &state);
|
|
||||||
ops::fs::init(isolate, &state);
|
|
||||||
}
|
|
||||||
Self(worker)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Deref for CompilerWorker {
|
|
||||||
type Target = WebWorker;
|
|
||||||
fn deref(&self) -> &Self::Target {
|
|
||||||
&self.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl DerefMut for CompilerWorker {
|
|
||||||
fn deref_mut(&mut self) -> &mut Self::Target {
|
|
||||||
&mut self.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Future for CompilerWorker {
|
|
||||||
type Output = Result<(), ErrBox>;
|
|
||||||
|
|
||||||
fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> {
|
|
||||||
let inner = self.get_mut();
|
|
||||||
inner.0.poll_unpin(cx)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
|
||||||
use crate::compilers::CompiledModule;
|
|
||||||
use crate::file_fetcher::SourceFile;
|
|
||||||
use deno_core::ErrBox;
|
|
||||||
use std::str;
|
|
||||||
|
|
||||||
pub struct JsCompiler {}
|
|
||||||
|
|
||||||
impl JsCompiler {
|
|
||||||
pub async fn compile(
|
|
||||||
&self,
|
|
||||||
source_file: SourceFile,
|
|
||||||
) -> Result<CompiledModule, ErrBox> {
|
|
||||||
Ok(CompiledModule {
|
|
||||||
code: str::from_utf8(&source_file.source_code)
|
|
||||||
.unwrap()
|
|
||||||
.to_string(),
|
|
||||||
name: source_file.url.to_string(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
|
||||||
use crate::ops::JsonResult;
|
|
||||||
use deno_core::ErrBox;
|
|
||||||
use futures::Future;
|
|
||||||
|
|
||||||
mod compiler_worker;
|
|
||||||
mod js;
|
|
||||||
mod ts;
|
|
||||||
|
|
||||||
pub use js::JsCompiler;
|
|
||||||
pub use ts::runtime_compile;
|
|
||||||
pub use ts::runtime_transpile;
|
|
||||||
pub use ts::TargetLib;
|
|
||||||
pub use ts::TsCompiler;
|
|
||||||
|
|
||||||
pub type CompilationResultFuture = dyn Future<Output = JsonResult>;
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
|
||||||
pub struct CompiledModule {
|
|
||||||
pub code: String,
|
|
||||||
pub name: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub type CompiledModuleFuture =
|
|
||||||
dyn Future<Output = Result<CompiledModule, ErrBox>>;
|
|
|
@ -1,8 +1,4 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||||
use crate::compilers::CompiledModule;
|
|
||||||
use crate::compilers::JsCompiler;
|
|
||||||
use crate::compilers::TargetLib;
|
|
||||||
use crate::compilers::TsCompiler;
|
|
||||||
use crate::deno_dir;
|
use crate::deno_dir;
|
||||||
use crate::file_fetcher::SourceFileFetcher;
|
use crate::file_fetcher::SourceFileFetcher;
|
||||||
use crate::flags;
|
use crate::flags;
|
||||||
|
@ -10,6 +6,9 @@ use crate::http_cache;
|
||||||
use crate::lockfile::Lockfile;
|
use crate::lockfile::Lockfile;
|
||||||
use crate::msg;
|
use crate::msg;
|
||||||
use crate::permissions::Permissions;
|
use crate::permissions::Permissions;
|
||||||
|
use crate::tsc::CompiledModule;
|
||||||
|
use crate::tsc::TargetLib;
|
||||||
|
use crate::tsc::TsCompiler;
|
||||||
use deno_core::ErrBox;
|
use deno_core::ErrBox;
|
||||||
use deno_core::ModuleSpecifier;
|
use deno_core::ModuleSpecifier;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
@ -33,7 +32,6 @@ pub struct GlobalStateInner {
|
||||||
pub permissions: Permissions,
|
pub permissions: Permissions,
|
||||||
pub dir: deno_dir::DenoDir,
|
pub dir: deno_dir::DenoDir,
|
||||||
pub file_fetcher: SourceFileFetcher,
|
pub file_fetcher: SourceFileFetcher,
|
||||||
pub js_compiler: JsCompiler,
|
|
||||||
pub ts_compiler: TsCompiler,
|
pub ts_compiler: TsCompiler,
|
||||||
pub lockfile: Option<Mutex<Lockfile>>,
|
pub lockfile: Option<Mutex<Lockfile>>,
|
||||||
pub compiler_starts: AtomicUsize,
|
pub compiler_starts: AtomicUsize,
|
||||||
|
@ -84,7 +82,6 @@ impl GlobalState {
|
||||||
flags,
|
flags,
|
||||||
file_fetcher,
|
file_fetcher,
|
||||||
ts_compiler,
|
ts_compiler,
|
||||||
js_compiler: JsCompiler {},
|
|
||||||
lockfile,
|
lockfile,
|
||||||
compiler_starts: AtomicUsize::new(0),
|
compiler_starts: AtomicUsize::new(0),
|
||||||
compile_lock: AsyncMutex::new(()),
|
compile_lock: AsyncMutex::new(()),
|
||||||
|
@ -140,10 +137,16 @@ impl GlobalState {
|
||||||
.ok();
|
.ok();
|
||||||
};
|
};
|
||||||
|
|
||||||
state1.js_compiler.compile(out).await
|
Ok(CompiledModule {
|
||||||
|
code: String::from_utf8(out.source_code)?,
|
||||||
|
name: out.url.to_string(),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => state1.js_compiler.compile(out).await,
|
_ => Ok(CompiledModule {
|
||||||
|
code: String::from_utf8(out.source_code)?,
|
||||||
|
name: out.url.to_string(),
|
||||||
|
}),
|
||||||
}?;
|
}?;
|
||||||
drop(compile_lock);
|
drop(compile_lock);
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ extern crate url;
|
||||||
|
|
||||||
mod checksum;
|
mod checksum;
|
||||||
pub mod colors;
|
pub mod colors;
|
||||||
pub mod compilers;
|
|
||||||
pub mod deno_dir;
|
pub mod deno_dir;
|
||||||
pub mod diagnostics;
|
pub mod diagnostics;
|
||||||
mod disk_cache;
|
mod disk_cache;
|
||||||
|
@ -57,6 +56,7 @@ mod swc_util;
|
||||||
mod test_runner;
|
mod test_runner;
|
||||||
pub mod test_util;
|
pub mod test_util;
|
||||||
mod tokio_util;
|
mod tokio_util;
|
||||||
|
mod tsc;
|
||||||
mod upgrade;
|
mod upgrade;
|
||||||
pub mod version;
|
pub mod version;
|
||||||
mod web_worker;
|
mod web_worker;
|
||||||
|
@ -66,7 +66,6 @@ pub use dprint_plugin_typescript::swc_common;
|
||||||
pub use dprint_plugin_typescript::swc_ecma_ast;
|
pub use dprint_plugin_typescript::swc_ecma_ast;
|
||||||
pub use dprint_plugin_typescript::swc_ecma_parser;
|
pub use dprint_plugin_typescript::swc_ecma_parser;
|
||||||
|
|
||||||
use crate::compilers::TargetLib;
|
|
||||||
use crate::doc::parser::DocFileLoader;
|
use crate::doc::parser::DocFileLoader;
|
||||||
use crate::file_fetcher::SourceFile;
|
use crate::file_fetcher::SourceFile;
|
||||||
use crate::file_fetcher::SourceFileFetcher;
|
use crate::file_fetcher::SourceFileFetcher;
|
||||||
|
@ -76,6 +75,7 @@ use crate::op_error::OpError;
|
||||||
use crate::ops::io::get_stdio;
|
use crate::ops::io::get_stdio;
|
||||||
use crate::state::DebugType;
|
use crate::state::DebugType;
|
||||||
use crate::state::State;
|
use crate::state::State;
|
||||||
|
use crate::tsc::TargetLib;
|
||||||
use crate::worker::MainWorker;
|
use crate::worker::MainWorker;
|
||||||
use deno_core::v8_set_flags;
|
use deno_core::v8_set_flags;
|
||||||
use deno_core::ErrBox;
|
use deno_core::ErrBox;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::compilers::CompiledModule;
|
use crate::tsc::CompiledModule;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
pub use serde_json::Value;
|
pub use serde_json::Value;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||||
use super::dispatch_json::{Deserialize, JsonOp, Value};
|
use super::dispatch_json::{Deserialize, JsonOp, Value};
|
||||||
use crate::compilers::runtime_compile;
|
|
||||||
use crate::compilers::runtime_transpile;
|
|
||||||
use crate::futures::FutureExt;
|
use crate::futures::FutureExt;
|
||||||
use crate::op_error::OpError;
|
use crate::op_error::OpError;
|
||||||
use crate::state::State;
|
use crate::state::State;
|
||||||
|
use crate::tsc::runtime_compile;
|
||||||
|
use crate::tsc::runtime_transpile;
|
||||||
use deno_core::CoreIsolate;
|
use deno_core::CoreIsolate;
|
||||||
use deno_core::ZeroCopyBuf;
|
use deno_core::ZeroCopyBuf;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||||
use crate::compilers::TargetLib;
|
|
||||||
use crate::file_fetcher::SourceFileFetcher;
|
use crate::file_fetcher::SourceFileFetcher;
|
||||||
use crate::global_state::GlobalState;
|
use crate::global_state::GlobalState;
|
||||||
use crate::global_timer::GlobalTimer;
|
use crate::global_timer::GlobalTimer;
|
||||||
|
@ -9,6 +8,7 @@ use crate::op_error::OpError;
|
||||||
use crate::ops::JsonOp;
|
use crate::ops::JsonOp;
|
||||||
use crate::ops::MinimalOp;
|
use crate::ops::MinimalOp;
|
||||||
use crate::permissions::Permissions;
|
use crate::permissions::Permissions;
|
||||||
|
use crate::tsc::TargetLib;
|
||||||
use crate::web_worker::WebWorkerHandle;
|
use crate::web_worker::WebWorkerHandle;
|
||||||
use deno_core::Buf;
|
use deno_core::Buf;
|
||||||
use deno_core::ErrBox;
|
use deno_core::ErrBox;
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||||
use super::compiler_worker::CompilerWorker;
|
|
||||||
use crate::colors;
|
use crate::colors;
|
||||||
use crate::compilers::CompiledModule;
|
|
||||||
use crate::diagnostics::Diagnostic;
|
use crate::diagnostics::Diagnostic;
|
||||||
use crate::diagnostics::DiagnosticItem;
|
use crate::diagnostics::DiagnosticItem;
|
||||||
use crate::disk_cache::DiskCache;
|
use crate::disk_cache::DiskCache;
|
||||||
|
@ -12,16 +10,23 @@ use crate::fs as deno_fs;
|
||||||
use crate::global_state::GlobalState;
|
use crate::global_state::GlobalState;
|
||||||
use crate::msg;
|
use crate::msg;
|
||||||
use crate::op_error::OpError;
|
use crate::op_error::OpError;
|
||||||
|
use crate::ops;
|
||||||
use crate::source_maps::SourceMapGetter;
|
use crate::source_maps::SourceMapGetter;
|
||||||
use crate::startup_data;
|
use crate::startup_data;
|
||||||
|
use crate::state::State;
|
||||||
use crate::state::*;
|
use crate::state::*;
|
||||||
use crate::tokio_util;
|
use crate::tokio_util;
|
||||||
use crate::version;
|
use crate::version;
|
||||||
|
use crate::web_worker::WebWorker;
|
||||||
use crate::web_worker::WebWorkerHandle;
|
use crate::web_worker::WebWorkerHandle;
|
||||||
use crate::worker::WorkerEvent;
|
use crate::worker::WorkerEvent;
|
||||||
|
use core::task::Context;
|
||||||
use deno_core::Buf;
|
use deno_core::Buf;
|
||||||
use deno_core::ErrBox;
|
use deno_core::ErrBox;
|
||||||
use deno_core::ModuleSpecifier;
|
use deno_core::ModuleSpecifier;
|
||||||
|
use deno_core::StartupData;
|
||||||
|
use futures::future::Future;
|
||||||
|
use futures::future::FutureExt;
|
||||||
use log::info;
|
use log::info;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
@ -33,13 +38,58 @@ use std::fs;
|
||||||
use std::hash::BuildHasher;
|
use std::hash::BuildHasher;
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
use std::ops::DerefMut;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use std::pin::Pin;
|
||||||
use std::str;
|
use std::str;
|
||||||
use std::sync::atomic::Ordering;
|
use std::sync::atomic::Ordering;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
|
use std::task::Poll;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct CompiledModule {
|
||||||
|
pub code: String,
|
||||||
|
pub name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct CompilerWorker(WebWorker);
|
||||||
|
|
||||||
|
impl CompilerWorker {
|
||||||
|
pub fn new(name: String, startup_data: StartupData, state: State) -> Self {
|
||||||
|
let state_ = state.clone();
|
||||||
|
let mut worker = WebWorker::new(name, startup_data, state_, false);
|
||||||
|
{
|
||||||
|
let isolate = &mut worker.isolate;
|
||||||
|
ops::compiler::init(isolate, &state);
|
||||||
|
}
|
||||||
|
Self(worker)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Deref for CompilerWorker {
|
||||||
|
type Target = WebWorker;
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DerefMut for CompilerWorker {
|
||||||
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||||
|
&mut self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Future for CompilerWorker {
|
||||||
|
type Output = Result<(), ErrBox>;
|
||||||
|
|
||||||
|
fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> {
|
||||||
|
let inner = self.get_mut();
|
||||||
|
inner.0.poll_unpin(cx)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref CHECK_JS_RE: Regex =
|
static ref CHECK_JS_RE: Regex =
|
||||||
Regex::new(r#""checkJs"\s*?:\s*?true"#).unwrap();
|
Regex::new(r#""checkJs"\s*?:\s*?true"#).unwrap();
|
||||||
|
@ -805,7 +855,7 @@ mod tests {
|
||||||
url: specifier.as_url().clone(),
|
url: specifier.as_url().clone(),
|
||||||
filename: PathBuf::from(p.to_str().unwrap().to_string()),
|
filename: PathBuf::from(p.to_str().unwrap().to_string()),
|
||||||
media_type: msg::MediaType::TypeScript,
|
media_type: msg::MediaType::TypeScript,
|
||||||
source_code: include_bytes!("../tests/002_hello.ts").to_vec(),
|
source_code: include_bytes!("./tests/002_hello.ts").to_vec(),
|
||||||
types_url: None,
|
types_url: None,
|
||||||
};
|
};
|
||||||
let mock_state =
|
let mock_state =
|
Loading…
Add table
Add a link
Reference in a new issue