1
1
const path = require ( 'path' ) ;
2
2
3
3
const postcss = require ( 'postcss' ) ;
4
+ const resolvePath = require ( 'resolve' ) ;
4
5
5
6
const readFile = require ( './utils' ) . readFile ;
6
7
const parseImportPath = require ( './utils' ) . parseImportPath ;
@@ -9,6 +10,11 @@ const findInlineDeclarations = require('./findInlineDeclarations');
9
10
const findNestedRules = require ( './findNestedRules' ) ;
10
11
const findMediaQueries = require ( './findMediaQueries' ) ;
11
12
13
+ const resolveFile = ( filePath , options ) =>
14
+ new Promise ( ( resolve , reject ) => {
15
+ resolvePath ( filePath , options , ( err , path ) => ( err ? reject ( err ) : resolve ( path ) ) ) ;
16
+ } ) ;
17
+
12
18
const processAtRule = ( onError , atRule , root , targetClass , importPath ) => {
13
19
const matchedDeclarations = findInlineDeclarations ( root , targetClass ) ;
14
20
const nestedRules = findNestedRules ( root , targetClass ) ;
@@ -45,7 +51,7 @@ const processAtRule = (onError, atRule, root, targetClass, importPath) => {
45
51
return [ ...nestedRules , ...mediaQueries ] ;
46
52
} ;
47
53
48
- const walkAtRule = ( root , result , promises ) => ( atRule ) => {
54
+ const walkAtRule = ( root , result , promises , resolve ) => ( atRule ) => {
49
55
const params = postcss . list . space ( atRule . params ) ;
50
56
const targetClass = params [ 0 ] ;
51
57
@@ -60,25 +66,30 @@ const walkAtRule = (root, result, promises) => (atRule) => {
60
66
}
61
67
62
68
const importPath = parseImportPath ( params . slice ( - 1 ) [ 0 ] ) ;
63
- const resolvedPath = path . resolve ( path . dirname ( root . source . input . file ) , importPath ) ;
64
-
65
69
promises . push (
66
- readFile ( resolvedPath )
67
- . then ( ( rawData ) => {
68
- const importedRoot = postcss . parse ( rawData ) ;
69
- return processAtRule ( onError , atRule , importedRoot , targetClass , importPath ) ;
70
- } )
70
+ resolve ( importPath )
71
+ . then ( ( resolvedPath ) =>
72
+ readFile ( resolvedPath ) . then ( ( rawData ) => {
73
+ const importedRoot = postcss . parse ( rawData ) ;
74
+ return processAtRule ( onError , atRule , importedRoot , targetClass , importPath ) ;
75
+ } ) ,
76
+ )
71
77
. catch ( ( ) => {
72
78
onError ( `Could not find file '${ importPath } '` ) ;
73
79
return [ ] ;
74
80
} ) ,
75
81
) ;
76
82
} ;
77
83
78
- const processFile = ( root , result ) => ( resolve ) => {
79
- const promises = [ ] ;
84
+ const processFile = ( root , result , paths ) => ( resolve ) => {
85
+ const fileResolver = ( importPath ) =>
86
+ resolveFile ( importPath , {
87
+ basedir : path . dirname ( root . source . input . file ) ,
88
+ paths,
89
+ } ) ;
80
90
81
- const atRuleWalker = walkAtRule ( root , result , promises ) ;
91
+ const promises = [ ] ;
92
+ const atRuleWalker = walkAtRule ( root , result , promises , fileResolver ) ;
82
93
83
94
root . walkRules ( ( rule ) => rule . walkAtRules ( 'inline' , atRuleWalker ) ) ;
84
95
@@ -90,6 +101,12 @@ const processFile = (root, result) => (resolve) => {
90
101
. catch ( resolve ) ;
91
102
} ;
92
103
93
- module . exports = postcss . plugin ( 'postcss-inline-class' , ( ) => ( root , result ) =>
94
- new Promise ( processFile ( root , result ) ) ,
95
- ) ;
104
+ const defaultOptions = Object . freeze ( {
105
+ paths : [ ] ,
106
+ extensions : [ '' ] ,
107
+ } ) ;
108
+
109
+ module . exports = postcss . plugin ( 'postcss-inline-class' , ( options ) => {
110
+ return ( root , result ) =>
111
+ new Promise ( processFile ( root , result , ( options || defaultOptions ) . paths ) ) ;
112
+ } ) ;
0 commit comments