@@ -2,7 +2,7 @@ var fs = require('fs');
2
2
var path = require ( 'path' ) ;
3
3
var exts = [ '.sass' , '.scss' ] ;
4
4
5
- function exists ( file ) {
5
+ const exists = ( file ) => {
6
6
try {
7
7
fs . accessSync ( file , fs . constants . F_OK ) ;
8
8
return true ;
@@ -11,57 +11,61 @@ function exists(file) {
11
11
}
12
12
}
13
13
14
+ const addPartialUnderscore = ( file , ext ) => {
15
+ const basename = path . basename ( file , ext ) ;
16
+ const partial = file . split ( path . sep ) ;
17
+ partial . splice ( - 1 , 1 , '_' + basename + ext ) ;
18
+ return partial . join ( path . sep ) ;
19
+ }
20
+
21
+ const resolveImportPath = ( file , ext ) => {
22
+ const basename = path . basename ( file ) ;
23
+ const fullFile = file ;
24
+ const isPartial = basename [ 0 ] === '_' ;
25
+
26
+ if ( exists ( file ) ) {
27
+ return file ;
28
+ } else if ( ! isPartial ) {
29
+ const partial = addPartialUnderscore ( file , ext ) ;
30
+ if ( exists ( partial ) ) return partial ;
31
+ }
32
+ return '' ;
33
+ }
34
+
14
35
module . exports = function ( url , prev , done ) {
15
36
if ( ! url ) return done ( null ) ;
16
37
17
- var urlParts = url . split ( '/' ) ;
18
- var packageName = urlParts [ 0 ] ;
19
- var cwd = process . cwd ( ) ;
38
+ const urlParts = url . split ( '/' ) ;
39
+ const packageName = urlParts [ 0 ] ;
40
+ const cwd = process . cwd ( ) ;
20
41
21
42
try {
22
43
var packagePath = require . resolve ( packageName , { paths : [ cwd ] } ) ;
23
44
} catch ( e ) {
24
45
return done ( null ) ;
25
46
}
26
47
27
- if ( ! packagePath ) return done ( null ) ;
28
-
29
- var parts = packagePath . split ( path . sep ) ;
48
+ const parts = packagePath . split ( path . sep ) ;
30
49
31
- for ( var i = parts . length ; i >= 0 ; i -- ) {
50
+ for ( let i = parts . length ; i >= 0 ; i -- ) {
32
51
if ( parts [ i ] !== packageName || parts [ i - 1 ] === packageName ) continue ;
33
52
34
- var before = parts . splice ( 0 , i + 1 ) ;
35
- var after = urlParts . splice ( 1 ) ;
36
-
37
- var resolved = [ ] . concat ( before , after ) . join ( path . sep ) ;
38
- var relative = path . relative ( cwd , resolved ) ;
39
- var ext = path . extname ( relative ) ;
40
- var basename = path . basename ( relative , ext ) ;
53
+ const before = parts . splice ( 0 , i + 1 ) ;
54
+ const after = urlParts . splice ( 1 ) ;
55
+ const resolved = [ ...before , ...after ] . join ( path . sep ) ;
56
+ const relative = path . relative ( cwd , resolved ) ;
57
+ const ext = path . extname ( relative ) ;
41
58
42
59
if ( ext ) {
43
- if ( basename [ 0 ] === '_' ) {
44
- if ( exists ( relative ) ) return done ( { file : relative } ) ;
45
- } else {
46
- if ( exists ( relative ) ) return done ( { file : relative } ) ;
47
- var partial = relative . split ( path . sep ) ;
48
- partial . splice ( - 1 , 1 , '_' + basename + ext ) ;
49
- partial = partial . join ( path . sep ) ;
50
- if ( exists ( partial ) ) return done ( { file : partial } ) ;
51
- }
60
+ const importPath = resolveImportPath ( relative , ext ) ;
61
+ if ( importPath ) return done ( { file : importPath } ) ;
52
62
} else {
53
- for ( var j = 0 ; j < exts . length ; j ++ ) {
54
- if ( basename [ 0 ] === '_' ) {
55
- if ( exists ( relative + exts [ j ] ) ) return done ( { file : relative + exts [ j ] } ) ;
56
- } else {
57
- if ( exists ( relative + exts [ j ] ) ) return done ( { file : relative + exts [ j ] } ) ;
58
- var partial = relative . split ( path . sep ) ;
59
- partial . splice ( - 1 , 1 , '_' + basename ) ;
60
- partial = partial . join ( path . sep ) ;
61
- if ( exists ( partial + exts [ j ] ) ) return done ( { file : partial + exts [ j ] } ) ;
62
- }
63
+ for ( let j = 0 ; j < exts . length ; j ++ ) {
64
+ const importPath = resolveImportPath ( relative + exts [ j ] , exts [ j ] ) ;
65
+ if ( importPath ) return done ( { file : importPath } ) ;
63
66
}
64
67
}
68
+ break ;
65
69
}
66
70
67
71
return done ( null ) ;
0 commit comments