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}