@@ -2,7 +2,7 @@ var fs = require('fs');
22var path = require ( 'path' ) ;
33var exts = [ '.sass' , '.scss' ] ;
44
5- function exists ( file ) {
5+ const exists = ( file ) => {
66 try {
77 fs . accessSync ( file , fs . constants . F_OK ) ;
88 return true ;
@@ -11,57 +11,61 @@ function exists(file) {
1111 }
1212}
1313
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+
1435module . exports = function ( url , prev , done ) {
1536 if ( ! url ) return done ( null ) ;
1637
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 ( ) ;
2041
2142 try {
2243 var packagePath = require . resolve ( packageName , { paths : [ cwd ] } ) ;
2344 } catch ( e ) {
2445 return done ( null ) ;
2546 }
2647
27- if ( ! packagePath ) return done ( null ) ;
28-
29- var parts = packagePath . split ( path . sep ) ;
48+ const parts = packagePath . split ( path . sep ) ;
3049
31- for ( var i = parts . length ; i >= 0 ; i -- ) {
50+ for ( let i = parts . length ; i >= 0 ; i -- ) {
3251 if ( parts [ i ] !== packageName || parts [ i - 1 ] === packageName ) continue ;
3352
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 ) ;
4158
4259 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 } ) ;
5262 } 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 } ) ;
6366 }
6467 }
68+ break ;
6569 }
6670
6771 return done ( null ) ;
0 commit comments