turbopack_core/
virtual_output.rs

1use turbo_tasks::{ResolvedVc, Vc};
2use turbo_tasks_fs::FileSystemPath;
3
4use crate::{
5    asset::{Asset, AssetContent},
6    output::{OutputAsset, OutputAssets},
7};
8
9/// An [OutputAsset] that is created from some passed source code and can have a list of references
10/// to other assets.
11#[turbo_tasks::value]
12pub struct VirtualOutputAsset {
13    pub path: ResolvedVc<FileSystemPath>,
14    pub content: ResolvedVc<AssetContent>,
15    pub references: ResolvedVc<OutputAssets>,
16}
17
18#[turbo_tasks::value_impl]
19impl VirtualOutputAsset {
20    #[turbo_tasks::function]
21    pub fn new(path: ResolvedVc<FileSystemPath>, content: ResolvedVc<AssetContent>) -> Vc<Self> {
22        VirtualOutputAsset {
23            path,
24            content,
25            references: OutputAssets::empty_resolved(),
26        }
27        .cell()
28    }
29
30    #[turbo_tasks::function]
31    pub fn new_with_references(
32        path: ResolvedVc<FileSystemPath>,
33        content: ResolvedVc<AssetContent>,
34        references: ResolvedVc<OutputAssets>,
35    ) -> Vc<Self> {
36        VirtualOutputAsset {
37            path,
38            content,
39            references,
40        }
41        .cell()
42    }
43}
44
45#[turbo_tasks::value_impl]
46impl OutputAsset for VirtualOutputAsset {
47    #[turbo_tasks::function]
48    fn path(&self) -> Vc<FileSystemPath> {
49        *self.path
50    }
51
52    #[turbo_tasks::function]
53    fn references(&self) -> Vc<OutputAssets> {
54        *self.references
55    }
56}
57
58#[turbo_tasks::value_impl]
59impl Asset for VirtualOutputAsset {
60    #[turbo_tasks::function]
61    fn content(&self) -> Vc<AssetContent> {
62        *self.content
63    }
64}