turbopack_static/
css.rs

1use turbo_rcstr::rcstr;
2use turbo_tasks::{ResolvedVc, Vc};
3use turbopack_core::{
4    asset::{Asset, AssetContent},
5    chunk::ChunkingContext,
6    ident::AssetIdent,
7    module::Module,
8    output::OutputAsset,
9    source::Source,
10};
11use turbopack_css::embed::CssEmbed;
12
13use crate::output_asset::StaticOutputAsset;
14
15#[turbo_tasks::value]
16#[derive(Clone)]
17pub struct StaticUrlCssModule {
18    pub source: ResolvedVc<Box<dyn Source>>,
19}
20
21#[turbo_tasks::value_impl]
22impl StaticUrlCssModule {
23    #[turbo_tasks::function]
24    pub fn new(source: ResolvedVc<Box<dyn Source>>) -> Vc<Self> {
25        Self::cell(StaticUrlCssModule { source })
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)
34    }
35}
36
37#[turbo_tasks::value_impl]
38impl Module for StaticUrlCssModule {
39    #[turbo_tasks::function]
40    fn ident(&self) -> Vc<AssetIdent> {
41        self.source.ident().with_modifier(rcstr!("static in css"))
42    }
43}
44
45#[turbo_tasks::value_impl]
46impl Asset for StaticUrlCssModule {
47    #[turbo_tasks::function]
48    fn content(&self) -> Vc<AssetContent> {
49        self.source.content()
50    }
51}
52
53#[turbo_tasks::value_impl]
54impl CssEmbed for StaticUrlCssModule {
55    #[turbo_tasks::function]
56    fn embedded_asset(
57        self: Vc<Self>,
58        chunking_context: Vc<Box<dyn ChunkingContext>>,
59    ) -> Vc<Box<dyn OutputAsset>> {
60        Vc::upcast(self.static_output_asset(chunking_context))
61    }
62}
63
64pub fn register() {
65    turbo_tasks::register();
66    turbo_tasks_fs::register();
67    turbopack_core::register();
68    turbopack_ecmascript::register();
69    include!(concat!(env!("OUT_DIR"), "/register.rs"));
70}