@@ -47,53 +47,53 @@ 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 : { }
59
- }
60
- }
61
-
62
- if ( options . config ) {
63
- if ( options . config . path ) {
64
- rc . path = path . resolve ( options . config . path )
50
+ Promise . resolve ( ) . then ( ( ) => {
51
+ if ( options . exec || options . parser || options . syntax || options . stringifier || options . plugins ) {
52
+ return parseOptions . call ( this , options )
65
53
}
66
54
67
- if ( options . config . ctx ) {
68
- rc . ctx . options = options . config . ctx
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
+ }
69
65
}
70
- }
71
66
72
- const sourceMap = options . sourceMap
67
+ // Read options from options.config only when options.config is object
68
+ if ( options . config ) {
69
+ if ( options . config . path ) {
70
+ rc . path = path . resolve ( options . config . path )
71
+ }
73
72
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 )
73
+ if ( options . config . ctx ) {
74
+ rc . ctx . options = options . config . ctx
75
+ }
87
76
}
88
77
89
78
return postcssrc ( rc . ctx , rc . path , { argv : false } )
90
- } ) . then ( ( config ) => {
91
- if ( ! config ) config = { }
79
+ . then ( ( config ) => {
80
+ // Get `sourceMap` option from loader options when no `map` option in `postcss.config.js`
81
+ if ( ! config . options . map ) config . options . map = options . sourceMap
92
82
83
+ return config
84
+ } )
85
+ } ) . then ( ( config ) => {
93
86
if ( config . file ) this . addDependency ( config . file )
94
87
88
+ let sourceMap = config . options . map
95
89
let plugins = config . plugins || [ ]
96
- let options = Object . assign ( {
90
+
91
+ // Disable override `to` option
92
+ if ( config . options . to ) delete config . options . to
93
+ // Disable override `from` option
94
+ if ( config . options . from ) delete config . options . from
95
+
96
+ let postcssOption = Object . assign ( {
97
97
to : file ,
98
98
from : file ,
99
99
map : sourceMap
@@ -105,20 +105,20 @@ module.exports = function loader (css, map) {
105
105
106
106
// Loader Exec (Deprecated)
107
107
// https://webpack.js.org/api/loaders/#deprecated-context-properties
108
- if ( options . parser === 'postcss-js' ) {
108
+ if ( postcssOption . parser === 'postcss-js' ) {
109
109
css = this . exec ( css , this . resource )
110
110
}
111
111
112
- if ( typeof options . parser === 'string' ) {
113
- options . parser = require ( options . parser )
112
+ if ( typeof postcssOption . parser === 'string' ) {
113
+ postcssOption . parser = require ( postcssOption . parser )
114
114
}
115
115
116
- if ( typeof options . syntax === 'string' ) {
117
- options . syntax = require ( options . syntax )
116
+ if ( typeof postcssOption . syntax === 'string' ) {
117
+ postcssOption . syntax = require ( postcssOption . syntax )
118
118
}
119
119
120
- if ( typeof options . stringifier === 'string' ) {
121
- options . stringifier = require ( options . stringifier )
120
+ if ( typeof postcssOption . stringifier === 'string' ) {
121
+ postcssOption . stringifier = require ( postcssOption . stringifier )
122
122
}
123
123
124
124
// Loader API Exec (Deprecated)
@@ -132,10 +132,10 @@ module.exports = function loader (css, map) {
132
132
}
133
133
134
134
if ( sourceMap && typeof map === 'string' ) map = JSON . parse ( map )
135
- if ( sourceMap && map ) options . map . prev = map
135
+ if ( sourceMap && map ) postcssOption . map . prev = map
136
136
137
137
return postcss ( plugins )
138
- . process ( css , options )
138
+ . process ( css , postcssOption )
139
139
. then ( ( result ) => {
140
140
result . warnings ( ) . forEach ( ( msg ) => this . emitWarning ( msg . toString ( ) ) )
141
141
0 commit comments