Skip to main content

turbopack_static/
css.rs

1use turbo_rcstr::{RcStr, rcstr};
2use turbo_tasks::{ResolvedVc, Vc};
3use turbopack_core::{
4    chunk::ChunkingContext,
5    ident::AssetIdent,
6    module::{Module, ModuleSideEffects},
7    output::OutputAsset,
8    source::Source,
9};
10use turbopack_css::embed::CssEmbed;
11
12use crate::output_asset::StaticOutputAsset;
13
14#[turbo_tasks::value]
15#[derive(Clone)]
16pub struct StaticUrlCssModule {
17    pub source: ResolvedVc<Box<dyn Source>>,
18    tag: Option<RcStr>,
19}
20
21#[turbo_tasks::value_impl]
22impl StaticUrlCssModule {
23    #[turbo_tasks::function]
24    pub fn new(source: ResolvedVc<Box<dyn Source>>, tag: Option<RcStr>) -> Vc<Self> {
25        Self::cell(StaticUrlCssModule { source, tag })
26    }
27
28    #[turbo_tasks::function]
29    fn static_output_asset(
30        &self,
31        chunking_context: ResolvedVc<Box<dyn ChunkingContext>>,
32    ) -> Vc<StaticOutputAsset> {
33        StaticOutputAsset::new(*chunking_context, *self.source, self.tag.clone())
34    }
35}
36
37#[turbo_tasks::value_impl]
38impl Module for StaticUrlCssModule {
39    #[turbo_tasks::function]
40    fn ident(&self) -> Vc<AssetIdent> {
41        let mut ident = self.source.ident().with_modifier(rcstr!("static in css"));
42        if let Some(tag) = &self.tag {
43            ident = ident.with_modifier(format!("tag {}", tag).into());
44        }
45        ident
46    }
47
48    #[turbo_tasks::function]
49    fn source(&self) -> Vc<turbopack_core::source::OptionSource> {
50        Vc::cell(Some(self.source))
51    }
52
53    #[turbo_tasks::function]
54    fn side_effects(self: Vc<Self>) -> Vc<ModuleSideEffects> {
55        ModuleSideEffects::SideEffectFree.cell()
56    }
57}
58
59#[turbo_tasks::value_impl]
60impl CssEmbed for StaticUrlCssModule {
61    #[turbo_tasks::function]
62    fn embedded_asset(
63        self: Vc<Self>,
64        chunking_context: Vc<Box<dyn ChunkingContext>>,
65    ) -> Vc<Box<dyn OutputAsset>> {
66        Vc::upcast(self.static_output_asset(chunking_context))
67    }
68}