turbopack_node/
backend.rs1use std::{future::Future, path::PathBuf, pin::Pin};
2
3use anyhow::Result;
4use rustc_hash::FxHashMap;
5use turbo_rcstr::RcStr;
6use turbo_tasks::ResolvedVc;
7use turbo_tasks_fs::FileSystemPath;
8
9use crate::{AssetsForSourceMapping, evaluate::EvaluatePool};
10
11pub struct CreatePoolOptions {
12 pub cwd: PathBuf,
13 pub entrypoint: PathBuf,
14 pub env: FxHashMap<RcStr, RcStr>,
15 pub assets_for_source_mapping: ResolvedVc<AssetsForSourceMapping>,
16 pub assets_root: FileSystemPath,
17 pub project_dir: FileSystemPath,
18 pub concurrency: usize,
19 pub debug: bool,
20}
21
22pub type CreatePoolFuture = Pin<Box<dyn Future<Output = Result<EvaluatePool>> + Send + 'static>>;
23
24mod sealed {
25 #[turbo_tasks::value_trait]
26 pub(crate) trait Sealed {}
27}
28
29#[cfg(feature = "worker_pool")]
30#[turbo_tasks::value_impl]
31impl sealed::Sealed for crate::worker_pool::WorkerThreadsBackend {}
32
33#[cfg(feature = "process_pool")]
34#[turbo_tasks::value_impl]
35impl sealed::Sealed for crate::process_pool::ChildProcessesBackend {}
36
37#[turbo_tasks::value_trait]
38pub trait NodeBackend: sealed::Sealed {
39 fn runtime_module_path(&self) -> RcStr;
40
41 fn globals_module_path(&self) -> RcStr;
42
43 fn create_pool(&self, options: CreatePoolOptions) -> CreatePoolFuture;
44
45 fn scale_down(&self) -> Result<()>;
46
47 fn scale_zero(&self) -> Result<()>;
48}