Skip to main content

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, OutputAssetsReference, OutputAssetsWithReferenced},
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: 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: FileSystemPath, content: ResolvedVc<AssetContent>) -> Vc<Self> {
22        VirtualOutputAsset {
23            path,
24            content,
25            references: OutputAssets::empty_resolved(),
26        }
27        .cell()
28    }
29}
30
31#[turbo_tasks::value_impl]
32impl OutputAssetsReference for VirtualOutputAsset {
33    #[turbo_tasks::function]
34    fn references(&self) -> Vc<OutputAssetsWithReferenced> {
35        OutputAssetsWithReferenced::from_assets(*self.references)
36    }
37}
38
39#[turbo_tasks::value_impl]
40impl OutputAsset for VirtualOutputAsset {
41    #[turbo_tasks::function]
42    fn path(&self) -> Vc<FileSystemPath> {
43        self.path.clone().cell()
44    }
45}
46
47#[turbo_tasks::value_impl]
48impl Asset for VirtualOutputAsset {
49    #[turbo_tasks::function]
50    fn content(&self) -> Vc<AssetContent> {
51        *self.content
52    }
53}