turbopack_static/
output_asset.rs1use 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}