@@ -6,51 +6,53 @@ use swc_css_visit::VisitMutWith;
6
6
use tracing:: debug;
7
7
8
8
use crate :: ast:: { build_css_ast, build_js_ast} ;
9
+ use crate :: build:: FileRequest ;
9
10
use crate :: compiler:: Context ;
10
- use crate :: css_modules:: {
11
- compile_css_modules, generate_code_for_css_modules, is_css_modules_path, is_mako_css_modules,
12
- MAKO_CSS_MODULES_SUFFIX ,
13
- } ;
11
+ use crate :: css_modules:: { compile_css_modules, generate_code_for_css_modules, is_css_modules_path} ;
14
12
use crate :: load:: { Asset , Content } ;
15
13
use crate :: module:: ModuleAst ;
16
14
17
- pub fn parse ( content : & Content , path : & str , context : & Arc < Context > ) -> Result < ModuleAst > {
18
- debug ! ( "parse {}" , path) ;
15
+ pub fn parse (
16
+ content : & Content ,
17
+ request : & FileRequest ,
18
+ context : & Arc < Context > ,
19
+ ) -> Result < ModuleAst > {
20
+ debug ! ( "parse {:?}" , request) ;
19
21
let ast = match content {
20
- Content :: Js ( content) => parse_js ( content, path , context) ?,
21
- Content :: Css ( content) => parse_css ( content, path , context) ?,
22
- Content :: Assets ( asset) => parse_asset ( asset, path , context) ?,
22
+ Content :: Js ( content) => parse_js ( content, request , context) ?,
23
+ Content :: Css ( content) => parse_css ( content, request , context) ?,
24
+ Content :: Assets ( asset) => parse_asset ( asset, request , context) ?,
23
25
} ;
24
26
Ok ( ast)
25
27
}
26
28
27
- fn parse_js ( content : & str , path : & str , context : & Arc < Context > ) -> Result < ModuleAst > {
28
- let ast = build_js_ast ( path, content, context) ?;
29
+ fn parse_js ( content : & str , request : & FileRequest , context : & Arc < Context > ) -> Result < ModuleAst > {
30
+ let ast = build_js_ast ( & request . path , content, context) ?;
29
31
Ok ( ModuleAst :: Script ( ast) )
30
32
}
31
33
32
- fn parse_css ( content : & str , path : & str , context : & Arc < Context > ) -> Result < ModuleAst > {
33
- let mut ast = build_css_ast ( path, content, context) ?;
34
+ fn parse_css ( content : & str , request : & FileRequest , context : & Arc < Context > ) -> Result < ModuleAst > {
35
+ let mut ast = build_css_ast ( & request. path , content, context) ?;
36
+ let is_modules = request. has_query ( "modules" ) ;
34
37
// parse css module as js
35
- if is_css_modules_path ( path) {
36
- let code = generate_code_for_css_modules ( path, & mut ast) ;
37
- let js_ast = build_js_ast ( path, & code, context) ?;
38
+ if is_css_modules_path ( & request . path ) && !is_modules {
39
+ let code = generate_code_for_css_modules ( & request . path , & mut ast) ;
40
+ let js_ast = build_js_ast ( & request . path , & code, context) ?;
38
41
Ok ( ModuleAst :: Script ( js_ast) )
39
42
} else {
40
43
// TODO: move to transform step
41
44
// compile css compat
42
45
compile_css_compat ( & mut ast) ;
43
46
// for mako css module, compile it and parse it as css
44
- if is_mako_css_modules ( path) {
45
- // should remove the suffix to generate the same hash
46
- compile_css_modules ( path. trim_end_matches ( MAKO_CSS_MODULES_SUFFIX ) , & mut ast) ;
47
+ if is_modules {
48
+ compile_css_modules ( & request. path , & mut ast) ;
47
49
}
48
50
Ok ( ModuleAst :: Css ( ast) )
49
51
}
50
52
}
51
53
52
- fn parse_asset ( asset : & Asset , path : & str , context : & Arc < Context > ) -> Result < ModuleAst > {
53
- let ast = build_js_ast ( path, & asset. content , context) ?;
54
+ fn parse_asset ( asset : & Asset , request : & FileRequest , context : & Arc < Context > ) -> Result < ModuleAst > {
55
+ let ast = build_js_ast ( & request . path , & asset. content , context) ?;
54
56
Ok ( ModuleAst :: Script ( ast) )
55
57
}
56
58
0 commit comments