turbopack_node/
node_entry.rs

1use anyhow::Result;
2use turbo_tasks::{ResolvedVc, Value, 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: ResolvedVc<FileSystemPath>,
13    pub output_root: ResolvedVc<FileSystemPath>,
14    pub project_dir: ResolvedVc<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    fn entry(self: Vc<Self>, data: Value<ContentSourceData>) -> Vc<NodeRenderingEntry>;
24    async fn entries(self: Vc<Self>) -> Result<Vc<NodeRenderingEntries>> {
25        Ok(Vc::cell(vec![
26            self.entry(Value::new(Default::default()))
27                .to_resolved()
28                .await?,
29        ]))
30    }
31}