@@ -47,78 +47,67 @@ module.exports = function loader (css, map) {
47
47
48
48
validateOptions ( require ( './options.json' ) , options , 'PostCSS Loader' )
49
49
50
- const rc = {
51
- path : path . dirname ( file ) ,
52
- ctx : {
53
- file : {
54
- extname : path . extname ( file ) ,
55
- dirname : path . dirname ( file ) ,
56
- basename : path . basename ( file )
57
- } ,
58
- options : { }
50
+ Promise . resolve ( ) . then ( ( ) => {
51
+ if ( ! options . config ) {
52
+ return parseOptions . call ( this , options )
53
+ }
54
+
55
+ const rc = {
56
+ path : path . dirname ( file ) ,
57
+ ctx : {
58
+ file : {
59
+ extname : path . extname ( file ) ,
60
+ dirname : path . dirname ( file ) ,
61
+ basename : path . basename ( file )
62
+ } ,
63
+ options : { }
64
+ }
59
65
}
60
- }
61
66
62
- if ( options . config ) {
63
67
if ( options . config . path ) {
64
68
rc . path = path . resolve ( options . config . path )
65
69
}
66
70
67
71
if ( options . config . ctx ) {
68
72
rc . ctx . options = options . config . ctx
69
73
}
70
- }
71
-
72
- const sourceMap = options . sourceMap
73
-
74
- Promise . resolve ( ) . then ( ( ) => {
75
- const length = Object . keys ( options ) . length
76
-
77
- // TODO
78
- // Refactor
79
- if ( ! options . config && ! sourceMap && length ) {
80
- return parseOptions . call ( this , options )
81
- } else if ( options . config && ! sourceMap && length > 1 ) {
82
- return parseOptions . call ( this , options )
83
- } else if ( ! options . config && sourceMap && length > 1 ) {
84
- return parseOptions . call ( this , options )
85
- } else if ( options . config && sourceMap && length > 2 ) {
86
- return parseOptions . call ( this , options )
87
- }
88
74
89
75
return postcssrc ( rc . ctx , rc . path , { argv : false } )
90
76
} ) . then ( ( config ) => {
91
77
if ( ! config ) config = { }
92
78
93
79
if ( config . file ) this . addDependency ( config . file )
94
80
81
+ const sourceMap = options . sourceMap
82
+ delete options . sourceMap
83
+
95
84
let plugins = config . plugins || [ ]
96
- let options = Object . assign ( {
85
+ let resolvedOptions = Object . assign ( {
97
86
to : file ,
98
87
from : file ,
99
88
map : sourceMap
100
89
? sourceMap === 'inline'
101
90
? { inline : true , annotation : false }
102
91
: { inline : false , annotation : false }
103
92
: false
104
- } , config . options )
93
+ } , options , config . options )
105
94
106
95
// Loader Exec (Deprecated)
107
96
// https://webpack.js.org/api/loaders/#deprecated-context-properties
108
- if ( options . parser === 'postcss-js' ) {
97
+ if ( resolvedOptions . parser === 'postcss-js' ) {
109
98
css = this . exec ( css , this . resource )
110
99
}
111
100
112
- if ( typeof options . parser === 'string' ) {
113
- options . parser = require ( options . parser )
101
+ if ( typeof resolvedOptions . parser === 'string' ) {
102
+ resolvedOptions . parser = require ( resolvedOptions . parser )
114
103
}
115
104
116
- if ( typeof options . syntax === 'string' ) {
117
- options . syntax = require ( options . syntax )
105
+ if ( typeof resolvedOptions . syntax === 'string' ) {
106
+ resolvedOptions . syntax = require ( resolvedOptions . syntax )
118
107
}
119
108
120
- if ( typeof options . stringifier === 'string' ) {
121
- options . stringifier = require ( options . stringifier )
109
+ if ( typeof resolvedOptions . stringifier === 'string' ) {
110
+ resolvedOptions . stringifier = require ( resolvedOptions . stringifier )
122
111
}
123
112
124
113
// Loader API Exec (Deprecated)
@@ -132,10 +121,10 @@ module.exports = function loader (css, map) {
132
121
}
133
122
134
123
if ( sourceMap && typeof map === 'string' ) map = JSON . parse ( map )
135
- if ( sourceMap && map ) options . map . prev = map
124
+ if ( sourceMap && map ) resolvedOptions . map . prev = map
136
125
137
126
return postcss ( plugins )
138
- . process ( css , options )
127
+ . process ( css , resolvedOptions )
139
128
. then ( ( result ) => {
140
129
result . warnings ( ) . forEach ( ( msg ) => this . emitWarning ( msg . toString ( ) ) )
141
130
0 commit comments