@@ -6,7 +6,7 @@ const loaderUtils = require('loader-utils');
6
6
7
7
module . exports = postcss . plugin (
8
8
'postcss-css-loader-parser' ,
9
- ( options ) => ( css ) => {
9
+ ( options ) => ( css , result ) => {
10
10
const imports = { } ;
11
11
let exports = { } ;
12
12
const importItems = [ ] ;
@@ -32,18 +32,42 @@ module.exports = postcss.plugin(
32
32
}
33
33
34
34
if ( options . import ) {
35
- css . walkAtRules ( / ^ i m p o r t $ / i, ( rule ) => {
36
- const values = Tokenizer . parseValues ( rule . params ) ;
35
+ css . walkAtRules ( / ^ i m p o r t $ / i, ( atrule ) => {
36
+ // Convert only top-level @import
37
+ if ( atrule . parent . type !== 'root' ) {
38
+ return ;
39
+ }
40
+
41
+ if ( atrule . nodes ) {
42
+ result . warn (
43
+ "It looks like you didn't end your @import statement correctly. " +
44
+ 'Child nodes are attached to it.' ,
45
+ { node : atrule }
46
+ ) ;
47
+ return ;
48
+ }
49
+
50
+ const values = Tokenizer . parseValues ( atrule . params ) ;
37
51
let [ url ] = values . nodes [ 0 ] . nodes ;
52
+
38
53
if ( url && url . type === 'url' ) {
39
54
( { url } = url ) ;
40
55
} else if ( url && url . type === 'string' ) {
41
56
url = url . value ;
42
- } else throw rule . error ( `Unexpected format ${ rule . params } ` ) ;
57
+ } else {
58
+ result . warn ( `Unable to find uri in '${ atrule . toString ( ) } '` , {
59
+ node : atrule ,
60
+ } ) ;
61
+
62
+ return ;
63
+ }
64
+
43
65
if ( ! url . replace ( / \s / g, '' ) . length ) {
44
66
return ;
45
67
}
68
+
46
69
values . nodes [ 0 ] . nodes . shift ( ) ;
70
+
47
71
const mediaQuery = Tokenizer . stringifyValues ( values ) ;
48
72
49
73
if ( loaderUtils . isUrlRequest ( url ) ) {
@@ -54,7 +78,7 @@ module.exports = postcss.plugin(
54
78
url,
55
79
mediaQuery,
56
80
} ) ;
57
- rule . remove ( ) ;
81
+ atrule . remove ( ) ;
58
82
} ) ;
59
83
}
60
84
0 commit comments