@@ -26,14 +26,14 @@ use std::task::Poll;
26
26
pub type ModuleId = i32 ;
27
27
pub ( crate ) type ModuleLoadId = i32 ;
28
28
29
- pub const BOM_CHAR : char = '\u{FEFF}' ;
29
+ pub const BOM_CHAR : & [ u8 ] = & [ 0xef , 0xbb , 0xbf ] ;
30
30
31
31
/// Strips the byte order mark from the provided text if it exists.
32
- fn strip_bom ( text : & str ) -> & str {
33
- if text . starts_with ( BOM_CHAR ) {
34
- & text [ BOM_CHAR . len_utf8 ( ) ..]
32
+ fn strip_bom ( source_code : & [ u8 ] ) -> & [ u8 ] {
33
+ if source_code . starts_with ( BOM_CHAR ) {
34
+ & source_code [ BOM_CHAR . len ( ) ..]
35
35
} else {
36
- text
36
+ source_code
37
37
}
38
38
}
39
39
@@ -190,7 +190,7 @@ impl std::fmt::Display for ModuleType {
190
190
// intermediate redirects from file loader.
191
191
#[ derive( Debug , Clone , Eq , PartialEq ) ]
192
192
pub struct ModuleSource {
193
- pub code : String ,
193
+ pub code : Box < [ u8 ] > ,
194
194
pub module_type : ModuleType ,
195
195
pub module_url_specified : String ,
196
196
pub module_url_found : String ,
@@ -315,9 +315,9 @@ impl ModuleLoader for FsModuleLoader {
315
315
ModuleType :: JavaScript
316
316
} ;
317
317
318
- let code = std:: fs:: read_to_string ( path) ?;
318
+ let code = std:: fs:: read ( path) ?;
319
319
let module = ModuleSource {
320
- code,
320
+ code : code . into_boxed_slice ( ) ,
321
321
module_type,
322
322
module_url_specified : module_specifier. to_string ( ) ,
323
323
module_url_found : module_specifier. to_string ( ) ,
@@ -781,10 +781,15 @@ impl ModuleMap {
781
781
& mut self ,
782
782
scope : & mut v8:: HandleScope ,
783
783
name : & str ,
784
- source : & str ,
784
+ source : & [ u8 ] ,
785
785
) -> Result < ModuleId , ModuleError > {
786
786
let name_str = v8:: String :: new ( scope, name) . unwrap ( ) ;
787
- let source_str = v8:: String :: new ( scope, strip_bom ( source) ) . unwrap ( ) ;
787
+ let source_str = v8:: String :: new_from_utf8 (
788
+ scope,
789
+ strip_bom ( source) ,
790
+ v8:: NewStringType :: Normal ,
791
+ )
792
+ . unwrap ( ) ;
788
793
789
794
let tc_scope = & mut v8:: TryCatch :: new ( scope) ;
790
795
@@ -822,10 +827,12 @@ impl ModuleMap {
822
827
scope : & mut v8:: HandleScope ,
823
828
main : bool ,
824
829
name : & str ,
825
- source : & str ,
830
+ source : & [ u8 ] ,
826
831
) -> Result < ModuleId , ModuleError > {
827
832
let name_str = v8:: String :: new ( scope, name) . unwrap ( ) ;
828
- let source_str = v8:: String :: new ( scope, source) . unwrap ( ) ;
833
+ let source_str =
834
+ v8:: String :: new_from_utf8 ( scope, source, v8:: NewStringType :: Normal )
835
+ . unwrap ( ) ;
829
836
830
837
let origin = bindings:: module_origin ( scope, name_str) ;
831
838
let source = v8:: script_compiler:: Source :: new ( source_str, Some ( & origin) ) ;
@@ -1258,7 +1265,7 @@ import "/a.js";
1258
1265
}
1259
1266
match mock_source_code ( & inner. url ) {
1260
1267
Some ( src) => Poll :: Ready ( Ok ( ModuleSource {
1261
- code : src. 0 . to_owned ( ) ,
1268
+ code : src. 0 . as_bytes ( ) . to_vec ( ) . into_boxed_slice ( ) ,
1262
1269
module_type : ModuleType :: JavaScript ,
1263
1270
module_url_specified : inner. url . clone ( ) ,
1264
1271
module_url_found : src. 1 . to_owned ( ) ,
@@ -1454,7 +1461,7 @@ import "/a.js";
1454
1461
scope,
1455
1462
true ,
1456
1463
& specifier_a,
1457
- r #"
1464
+ br #"
1458
1465
import { b } from './b.js'
1459
1466
if (b() != 'b') throw Error();
1460
1467
let control = 42;
@@ -1478,7 +1485,7 @@ import "/a.js";
1478
1485
scope,
1479
1486
false ,
1480
1487
"file:///b.js" ,
1481
- "export function b() { return 'b' }" ,
1488
+ b "export function b() { return 'b' }",
1482
1489
)
1483
1490
. unwrap ( ) ;
1484
1491
let imports = module_map. get_requested_modules ( mod_b) . unwrap ( ) ;
@@ -1561,7 +1568,7 @@ import "/a.js";
1561
1568
scope,
1562
1569
true ,
1563
1570
& specifier_a,
1564
- r #"
1571
+ br #"
1565
1572
import jsonData from './b.json' assert {type: "json"};
1566
1573
assert(jsonData.a == "b");
1567
1574
assert(jsonData.c.d == 10);
@@ -1582,7 +1589,7 @@ import "/a.js";
1582
1589
. new_json_module (
1583
1590
scope,
1584
1591
"file:///b.json" ,
1585
- "{\" a\" : \" b\" , \" c\" : {\" d\" : 10}}" ,
1592
+ b "{\" a\" : \" b\" , \" c\" : {\" d\" : 10}}",
1586
1593
)
1587
1594
. unwrap ( ) ;
1588
1595
let imports = module_map. get_requested_modules ( mod_b) . unwrap ( ) ;
@@ -1692,7 +1699,9 @@ import "/a.js";
1692
1699
let info = ModuleSource {
1693
1700
module_url_specified : specifier. to_string ( ) ,
1694
1701
module_url_found : specifier. to_string ( ) ,
1695
- code : "export function b() { return 'b' }" . to_owned ( ) ,
1702
+ code : b"export function b() { return 'b' }"
1703
+ . to_vec ( )
1704
+ . into_boxed_slice ( ) ,
1696
1705
module_type : ModuleType :: JavaScript ,
1697
1706
} ;
1698
1707
async move { Ok ( info) } . boxed ( )
@@ -1836,7 +1845,7 @@ import "/a.js";
1836
1845
let info = ModuleSource {
1837
1846
module_url_specified : specifier. to_string ( ) ,
1838
1847
module_url_found : specifier. to_string ( ) ,
1839
- code : code. to_owned ( ) ,
1848
+ code : code. as_bytes ( ) . to_vec ( ) . into_boxed_slice ( ) ,
1840
1849
module_type : ModuleType :: JavaScript ,
1841
1850
} ;
1842
1851
async move { Ok ( info) } . boxed ( )
@@ -2184,13 +2193,17 @@ if (import.meta.url != 'file:///main_with_code.js') throw Error();
2184
2193
"file:///main_module.js" => Ok ( ModuleSource {
2185
2194
module_url_specified : "file:///main_module.js" . to_string ( ) ,
2186
2195
module_url_found : "file:///main_module.js" . to_string ( ) ,
2187
- code : "if (!import.meta.main) throw Error();" . to_owned ( ) ,
2196
+ code : b"if (!import.meta.main) throw Error();"
2197
+ . to_vec ( )
2198
+ . into_boxed_slice ( ) ,
2188
2199
module_type : ModuleType :: JavaScript ,
2189
2200
} ) ,
2190
2201
"file:///side_module.js" => Ok ( ModuleSource {
2191
2202
module_url_specified : "file:///side_module.js" . to_string ( ) ,
2192
2203
module_url_found : "file:///side_module.js" . to_string ( ) ,
2193
- code : "if (import.meta.main) throw Error();" . to_owned ( ) ,
2204
+ code : b"if (import.meta.main) throw Error();"
2205
+ . to_vec ( )
2206
+ . into_boxed_slice ( ) ,
2194
2207
module_type : ModuleType :: JavaScript ,
2195
2208
} ) ,
2196
2209
_ => unreachable ! ( ) ,
0 commit comments