@@ -7,7 +7,7 @@ module.exports = reworkNPM;
7
7
8
8
function reworkNPM ( dir ) {
9
9
return function ( style ) {
10
- style . rules = resolveImports ( dir , style ) ;
10
+ style . rules = resolveImports ( [ ] , dir , style ) ;
11
11
return style ;
12
12
} ;
13
13
}
@@ -17,7 +17,7 @@ function isNpmImport(path) {
17
17
return ! / : \/ \/ / . test ( path ) ;
18
18
}
19
19
20
- function resolveImports ( dir , style ) {
20
+ function resolveImports ( included , dir , style ) {
21
21
dir = dir || process . cwd ( ) ;
22
22
dir = path . resolve ( dir ) ;
23
23
@@ -26,17 +26,18 @@ function resolveImports(dir, style) {
26
26
if ( rule . type !== 'import' ) {
27
27
processed . push ( rule ) ;
28
28
} else {
29
- processed = processed . concat ( getImport ( dir , rule ) ) ;
29
+ var imported = getImport ( included , dir , rule ) ;
30
+ processed = processed . concat ( imported ) ;
30
31
}
31
32
} ) ;
32
33
33
34
return processed ;
34
35
}
35
36
36
- function getImport ( dir , rule ) {
37
+ function resolveImport ( dir , rule ) {
37
38
var name = rule . import . replace ( / ^ \" | \" $ / g, '' ) ;
38
39
if ( ! isNpmImport ( name ) ) {
39
- return [ rule ] ;
40
+ return null ;
40
41
}
41
42
42
43
var options = {
@@ -45,13 +46,29 @@ function getImport(dir, rule) {
45
46
packageFilter : processPackage
46
47
} ;
47
48
48
- var file = resolve . sync ( name , options ) ,
49
- importDir = path . dirname ( file ) ,
49
+ var file = resolve . sync ( name , options ) ;
50
+ return path . normalize ( file ) ;
51
+ }
52
+
53
+ function getImport ( included , dir , rule ) {
54
+ var file = resolveImport ( dir , rule ) ;
55
+ if ( ! file ) {
56
+ return [ rule ] ;
57
+ }
58
+
59
+ // Only include a file once
60
+ if ( included . indexOf ( file ) !== - 1 ) {
61
+ return [ ] ;
62
+ }
63
+
64
+ included . push ( file ) ;
65
+
66
+ var importDir = path . dirname ( file ) ,
50
67
contents = fs . readFileSync ( file , 'utf8' ) ,
51
68
styles = css . parse ( contents ) . stylesheet ;
52
69
53
70
// Resolve imports in the imported file
54
- return resolveImports ( importDir , styles ) ;
71
+ return resolveImports ( included , importDir , styles ) ;
55
72
}
56
73
57
74
function processPackage ( package ) {
0 commit comments