diff --git a/crates/oxc_codegen/src/gen.rs b/crates/oxc_codegen/src/gen.rs index c36137311f5c9..fdb9c49a9dff8 100644 --- a/crates/oxc_codegen/src/gen.rs +++ b/crates/oxc_codegen/src/gen.rs @@ -2079,18 +2079,23 @@ impl Gen for TemplateLiteral<'_> { fn r#gen(&self, p: &mut Codegen, _ctx: Context) { p.add_source_mapping(self.span); p.print_ascii_byte(b'`'); - let mut expressions = self.expressions.iter(); - for quasi in &self.quasis { + debug_assert_eq!(self.quasis.len(), self.expressions.len() + 1); + + let (first_quasi, remaining_quasis) = self.quasis.split_first().unwrap(); + + p.add_source_mapping(first_quasi.span); + p.print_str_escaping_script_close_tag(first_quasi.value.raw.as_str()); + p.add_source_mapping_end(first_quasi.span); + + for (expr, quasi) in self.expressions.iter().zip(remaining_quasis) { + p.print_str("${"); + p.print_expression(expr); + p.print_ascii_byte(b'}'); + p.add_source_mapping(quasi.span); p.print_str_escaping_script_close_tag(quasi.value.raw.as_str()); p.add_source_mapping_end(quasi.span); - - if let Some(expr) = expressions.next() { - p.print_str("${"); - p.print_expression(expr); - p.print_ascii_byte(b'}'); - } } p.print_ascii_byte(b'`');