diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index 40430b44516..40b2d7e05ee 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -2150,7 +2150,7 @@ mod tests { collect_decls(&module), Mark::fresh(Mark::root()), global_mark, - false, + true, ); module.visit_with(&mut collect); @@ -2745,7 +2745,7 @@ mod tests { "#, ); - assert!(collect.bailouts.is_none()); + assert!(collect.bailouts.unwrap().is_empty()); assert_eq!( code, @@ -2766,7 +2766,7 @@ mod tests { foo.bar(); "#, ); - assert!(collect.bailouts.is_none()); + assert!(collect.bailouts.unwrap().is_empty()); assert_eq!( code, @@ -2777,6 +2777,34 @@ mod tests { "#} ); + let (collect, code, _hoist) = parse( + r#" + import * as foo from 'other'; + foo.bar(); + let y = "bar"; + foo[y](); + "#, + ); + assert_eq!( + collect + .bailouts + .unwrap() + .iter() + .map(|b| &b.reason) + .collect::>(), + vec![&BailoutReason::NonStaticAccess] + ); + + assert_eq!( + code, + indoc! {r#" + import "abc:other"; + $abc$import$70a00e0a8474f72a.bar(); + let $abc$var$y = "bar"; + $abc$import$70a00e0a8474f72a[$abc$var$y](); + "#} + ); + let (collect, code, _hoist) = parse( r#" import other from 'other'; @@ -2785,7 +2813,7 @@ mod tests { "#, ); - assert!(collect.bailouts.is_none()); + assert!(collect.bailouts.unwrap().is_empty()); assert_eq!( code, diff --git a/packages/transformers/js/core/src/utils.rs b/packages/transformers/js/core/src/utils.rs index 3baabddc9ff..8d65d20f3e9 100644 --- a/packages/transformers/js/core/src/utils.rs +++ b/packages/transformers/js/core/src/utils.rs @@ -275,6 +275,7 @@ pub enum SourceType { Module, } +#[derive(Debug)] pub struct Bailout { pub loc: SourceLocation, pub reason: BailoutReason, @@ -297,7 +298,7 @@ impl Bailout { } } -#[derive(Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq)] pub enum BailoutReason { NonTopLevelRequire, NonStaticDestructuring,