@@ -33,12 +33,16 @@ impl<'a> VuePartialLoader<'a> {
33
33
34
34
fn parse_script ( & self , pointer : & mut usize ) -> Option < JavaScriptSource < ' a > > {
35
35
let script_start_finder = Finder :: new ( SCRIPT_START ) ;
36
- let script_end_finder = Finder :: new ( SCRIPT_END ) ;
37
36
38
37
// find opening "<script"
39
38
let offset = script_start_finder. find ( self . source_text [ * pointer..] . as_bytes ( ) ) ?;
40
39
* pointer += offset + SCRIPT_START . len ( ) ;
41
40
41
+ // skip `<script-`
42
+ if !self . source_text [ * pointer..] . starts_with ( [ ' ' , '>' ] ) {
43
+ return self . parse_script ( pointer) ;
44
+ }
45
+
42
46
// find closing ">"
43
47
let offset = find_script_closing_angle ( self . source_text , * pointer) ?;
44
48
@@ -51,6 +55,7 @@ impl<'a> VuePartialLoader<'a> {
51
55
let js_start = * pointer;
52
56
53
57
// find "</script>"
58
+ let script_end_finder = Finder :: new ( SCRIPT_END ) ;
54
59
let offset = script_end_finder. find ( self . source_text [ * pointer..] . as_bytes ( ) ) ?;
55
60
let js_end = * pointer + offset;
56
61
* pointer += offset + SCRIPT_END . len ( ) ;
@@ -236,4 +241,15 @@ mod test {
236
241
. trim( )
237
242
) ;
238
243
}
244
+
245
+ #[ test]
246
+ fn test_script_in_template ( ) {
247
+ let source_text = r"
248
+ <template><script-view /></template>
249
+ <script>a</script>
250
+ " ;
251
+ let sources = VuePartialLoader :: new ( source_text) . parse ( ) ;
252
+ assert_eq ! ( sources. len( ) , 1 ) ;
253
+ assert_eq ! ( sources[ 0 ] . source_text, "a" ) ;
254
+ }
239
255
}
0 commit comments