@@ -2,6 +2,8 @@ use memchr::memmem::Finder;
22
33use oxc_span:: SourceType ;
44
5+ use crate :: frameworks:: FrameworkOptions ;
6+
57use super :: { JavaScriptSource , SCRIPT_END , SCRIPT_START , find_script_closing_angle} ;
68
79pub struct VuePartialLoader < ' a > {
@@ -52,6 +54,7 @@ impl<'a> VuePartialLoader<'a> {
5254
5355 // parse `lang`
5456 let lang = Self :: extract_lang_attribute ( content) ;
57+ let is_setup = content. contains ( "setup" ) ; // check if "setup" is present, does not check if its inside an attribute
5558
5659 let Ok ( mut source_type) = SourceType :: from_extension ( lang) else { return None } ;
5760 if !lang. contains ( 'x' ) {
@@ -70,7 +73,12 @@ impl<'a> VuePartialLoader<'a> {
7073 let source_text = & self . source_text [ js_start..js_end] ;
7174 // NOTE: loader checked that source_text.len() is less than u32::MAX
7275 #[ expect( clippy:: cast_possible_truncation) ]
73- Some ( JavaScriptSource :: partial ( source_text, source_type, js_start as u32 ) )
76+ Some ( JavaScriptSource :: partial (
77+ source_text,
78+ source_type,
79+ if is_setup { FrameworkOptions :: VueSetup } else { FrameworkOptions :: None } ,
80+ js_start as u32 ,
81+ ) )
7482 }
7583
7684 fn extract_lang_attribute ( content : & str ) -> & str {
@@ -115,6 +123,8 @@ impl<'a> VuePartialLoader<'a> {
115123mod test {
116124 use oxc_span:: SourceType ;
117125
126+ use crate :: FrameworkOptions ;
127+
118128 use super :: { JavaScriptSource , VuePartialLoader } ;
119129
120130 fn parse_vue ( source_text : & str ) -> JavaScriptSource < ' _ > {
@@ -132,6 +142,7 @@ mod test {
132142 "# ;
133143
134144 let result = parse_vue ( source_text) ;
145+ assert_eq ! ( result. framework_options, FrameworkOptions :: None ) ;
135146 assert_eq ! ( result. source_text, r#" console.log("hi") "# ) ;
136147 }
137148
@@ -229,7 +240,9 @@ mod test {
229240 let sources = VuePartialLoader :: new ( source_text) . parse ( ) ;
230241 assert_eq ! ( sources. len( ) , 2 ) ;
231242 assert_eq ! ( sources[ 0 ] . source_text, "a" ) ;
243+ assert_eq ! ( sources[ 0 ] . framework_options, FrameworkOptions :: None ) ;
232244 assert_eq ! ( sources[ 1 ] . source_text, "b" ) ;
245+ assert_eq ! ( sources[ 1 ] . framework_options, FrameworkOptions :: VueSetup ) ;
233246 }
234247
235248 #[ test]
0 commit comments