turbopack_core/
virtual_output.rs1use 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#[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 #[turbo_tasks::function]
31 pub fn new_with_references(
32 path: 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 OutputAssetsReference for VirtualOutputAsset {
47 #[turbo_tasks::function]
48 fn references(&self) -> Vc<OutputAssetsWithReferenced> {
49 OutputAssetsWithReferenced::from_assets(*self.references)
50 }
51}
52
53#[turbo_tasks::value_impl]
54impl OutputAsset for VirtualOutputAsset {
55 #[turbo_tasks::function]
56 fn path(&self) -> Vc<FileSystemPath> {
57 self.path.clone().cell()
58 }
59}
60
61#[turbo_tasks::value_impl]
62impl Asset for VirtualOutputAsset {
63 #[turbo_tasks::function]
64 fn content(&self) -> Vc<AssetContent> {
65 *self.content
66 }
67}