turbopack_ecmascript_plugins/transform/
styled_jsx.rs1use 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 &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}