turbopack_ecmascript_plugins/transform/
styled_jsx.rs

1use anyhow::Result;
2use async_trait::async_trait;
3use swc_core::{
4    common::FileName,
5    ecma::{ast::Program, preset_env::Versions},
6};
7use turbopack_ecmascript::{CustomTransformer, TransformContext};
8
9#[derive(Debug)]
10pub struct StyledJsxTransformer {
11    target_browsers: Versions,
12}
13
14impl StyledJsxTransformer {
15    pub fn new(target_browsers: Versions) -> Self {
16        Self { target_browsers }
17    }
18}
19
20#[async_trait]
21impl CustomTransformer for StyledJsxTransformer {
22    #[tracing::instrument(level = tracing::Level::TRACE, name = "styled_jsx", skip_all)]
23    async fn transform(&self, program: &mut Program, ctx: &TransformContext<'_>) -> Result<()> {
24        program.mutate(styled_jsx::visitor::styled_jsx(
25            ctx.source_map.clone(),
26            // styled_jsx don't really use that in a relevant way
27            &FileName::Anon,
28            &styled_jsx::visitor::Config {
29                use_lightningcss: true,
30                browsers: self.target_browsers,
31            },
32            &styled_jsx::visitor::NativeConfig { process_css: None },
33        ));
34
35        Ok(())
36    }
37}