turbopack_node/
node_entry.rs

1use anyhow::Result;
2use turbo_tasks::{ResolvedVc, Vc};
3use turbo_tasks_fs::FileSystemPath;
4use turbopack_core::chunk::{ChunkingContext, EvaluatableAsset, EvaluatableAssets};
5use turbopack_dev_server::source::ContentSourceData;
6
7#[turbo_tasks::value(shared)]
8pub struct NodeRenderingEntry {
9    pub runtime_entries: ResolvedVc<EvaluatableAssets>,
10    pub module: ResolvedVc<Box<dyn EvaluatableAsset>>,
11    pub chunking_context: ResolvedVc<Box<dyn ChunkingContext>>,
12    pub intermediate_output_path: FileSystemPath,
13    pub output_root: FileSystemPath,
14    pub project_dir: FileSystemPath,
15}
16
17#[turbo_tasks::value(transparent)]
18pub struct NodeRenderingEntries(Vec<ResolvedVc<NodeRenderingEntry>>);
19
20/// Trait that allows to get the entry module for rendering something in Node.js
21#[turbo_tasks::value_trait]
22pub trait NodeEntry {
23    #[turbo_tasks::function]
24    fn entry(self: Vc<Self>, data: ContentSourceData) -> Vc<NodeRenderingEntry>;
25
26    #[turbo_tasks::function]
27    async fn entries(self: Vc<Self>) -> Result<Vc<NodeRenderingEntries>> {
28        Ok(Vc::cell(vec![
29            self.entry(Default::default()).to_resolved().await?,
30        ]))
31    }
32}