Skip to main content

turbopack_static/
output_asset.rs

1use turbo_rcstr::RcStr;
2use turbo_tasks::{ResolvedVc, Vc};
3use turbo_tasks_fs::FileSystemPath;
4use turbopack_core::{
5    asset::{Asset, AssetContent},
6    chunk::ChunkingContext,
7    output::{OutputAsset, OutputAssetsReference},
8    source::Source,
9};
10#[turbo_tasks::value]
11pub struct StaticOutputAsset {
12    chunking_context: ResolvedVc<Box<dyn ChunkingContext>>,
13    source: ResolvedVc<Box<dyn Source>>,
14    tag: Option<RcStr>,
15}
16
17#[turbo_tasks::value_impl]
18impl StaticOutputAsset {
19    #[turbo_tasks::function]
20    pub fn new(
21        chunking_context: ResolvedVc<Box<dyn ChunkingContext>>,
22        source: ResolvedVc<Box<dyn Source>>,
23        tag: Option<RcStr>,
24    ) -> Vc<Self> {
25        Self::cell(StaticOutputAsset {
26            chunking_context,
27            source,
28            tag,
29        })
30    }
31}
32
33#[turbo_tasks::value_impl]
34impl OutputAssetsReference for StaticOutputAsset {}
35
36#[turbo_tasks::value_impl]
37impl OutputAsset for StaticOutputAsset {
38    #[turbo_tasks::function]
39    fn path(&self) -> Vc<FileSystemPath> {
40        self.chunking_context.asset_path(
41            self.source.content(),
42            self.source.ident(),
43            self.tag.clone(),
44        )
45    }
46}
47
48#[turbo_tasks::value_impl]
49impl Asset for StaticOutputAsset {
50    #[turbo_tasks::function]
51    fn content(&self) -> Vc<AssetContent> {
52        self.source.content()
53    }
54}