@@ -30,40 +30,56 @@ function validateRuntimeConfig(runtimeConfig) {
3030class WebpackConfig {
3131 constructor ( runtimeConfig ) {
3232 validateRuntimeConfig ( runtimeConfig ) ;
33+
3334 this . runtimeConfig = runtimeConfig ;
34- this . outputPath = null ;
35- this . publicPath = null ;
36- this . manifestKeyPrefix = null ;
3735 this . entries = new Map ( ) ;
3836 this . styleEntries = new Map ( ) ;
3937 this . plugins = [ ] ;
38+ this . loaders = [ ] ;
39+
40+ // Global settings
41+ this . outputPath = null ;
42+ this . publicPath = null ;
43+ this . manifestKeyPrefix = null ;
44+ this . sharedCommonsEntryName = null ;
45+ this . providedVariables = { } ;
46+ this . configuredFilenames = { } ;
47+
48+ // Features/Loaders flags
4049 this . useVersioning = false ;
4150 this . useSourceMaps = false ;
51+ this . cleanupOutput = false ;
52+ this . useImagesLoader = true ;
53+ this . useFontsLoader = true ;
4254 this . usePostCssLoader = false ;
43- this . postCssLoaderOptionsCallback = function ( ) { } ;
44- this . useSassLoader = false ;
45- this . sassLoaderOptionsCallback = function ( ) { } ;
46- this . sassOptions = {
47- resolve_url_loader : true
48- } ;
4955 this . useLessLoader = false ;
50- this . lessLoaderOptionsCallback = function ( ) { } ;
51- this . cleanupOutput = false ;
52- this . sharedCommonsEntryName = null ;
53- this . providedVariables = { } ;
54- this . babelConfigurationCallback = function ( ) { } ;
56+ this . useSassLoader = false ;
5557 this . useReact = false ;
5658 this . useVueLoader = false ;
57- this . vueLoaderOptionsCallback = ( ) => { } ;
58- this . loaders = [ ] ;
5959 this . useTypeScriptLoader = false ;
60- this . tsConfigurationCallback = function ( ) { } ;
6160 this . useForkedTypeScriptTypeChecking = false ;
61+
62+ // Features/Loaders options
63+ this . sassOptions = {
64+ resolve_url_loader : true
65+ } ;
66+
67+ // Features/Loaders options callbacks
68+ this . postCssLoaderOptionsCallback = ( ) => { } ;
69+ this . sassLoaderOptionsCallback = ( ) => { } ;
70+ this . lessLoaderOptionsCallback = ( ) => { } ;
71+ this . babelConfigurationCallback = ( ) => { } ;
72+ this . vueLoaderOptionsCallback = ( ) => { } ;
73+ this . tsConfigurationCallback = ( ) => { } ;
74+
75+ // Plugins callbacks
76+ this . definePluginOptionsCallback = ( ) => { } ;
77+ this . extractTextPluginOptionsCallback = ( ) => { } ;
6278 this . forkedTypeScriptTypesCheckOptionsCallback = ( ) => { } ;
63- this . useImagesLoader = true ;
64- this . useFontsLoader = true ;
65- this . configuredFilenames = { } ;
66- this . manifestPluginOptionsCallback = function ( ) { } ;
79+ this . friendlyErrorsPluginOptionsCallback = ( ) => { } ;
80+ this . loaderOptionsPluginOptionsCallback = ( ) => { } ;
81+ this . manifestPluginOptionsCallback = ( ) => { } ;
82+ this . uglifyJsPluginOptionsCallback = ( ) => { } ;
6783 }
6884
6985 getContext ( ) {
@@ -118,6 +134,38 @@ class WebpackConfig {
118134 this . manifestKeyPrefix = manifestKeyPrefix ;
119135 }
120136
137+ configureDefinePlugin ( definePluginOptionsCallback = ( ) => { } ) {
138+ if ( typeof definePluginOptionsCallback !== 'function' ) {
139+ throw new Error ( 'Argument 1 to configureDefinePlugin() must be a callback function' ) ;
140+ }
141+
142+ this . definePluginOptionsCallback = definePluginOptionsCallback ;
143+ }
144+
145+ configureExtractTextPlugin ( extractTextPluginOptionsCallback = ( ) => { } ) {
146+ if ( typeof extractTextPluginOptionsCallback !== 'function' ) {
147+ throw new Error ( 'Argument 1 to configureExtractTextPlugin() must be a callback function' ) ;
148+ }
149+
150+ this . extractTextPluginOptionsCallback = extractTextPluginOptionsCallback ;
151+ }
152+
153+ configureFriendlyErrorsPlugin ( friendlyErrorsPluginOptionsCallback = ( ) => { } ) {
154+ if ( typeof friendlyErrorsPluginOptionsCallback !== 'function' ) {
155+ throw new Error ( 'Argument 1 to configureFriendlyErrorsPlugin() must be a callback function' ) ;
156+ }
157+
158+ this . friendlyErrorsPluginOptionsCallback = friendlyErrorsPluginOptionsCallback ;
159+ }
160+
161+ configureLoaderOptionsPlugin ( loaderOptionsPluginOptionsCallback = ( ) => { } ) {
162+ if ( typeof loaderOptionsPluginOptionsCallback !== 'function' ) {
163+ throw new Error ( 'Argument 1 to configureLoaderOptionsPlugin() must be a callback function' ) ;
164+ }
165+
166+ this . loaderOptionsPluginOptionsCallback = loaderOptionsPluginOptionsCallback ;
167+ }
168+
121169 configureManifestPlugin ( manifestPluginOptionsCallback = ( ) => { } ) {
122170 if ( typeof manifestPluginOptionsCallback !== 'function' ) {
123171 throw new Error ( 'Argument 1 to configureManifestPlugin() must be a callback function' ) ;
@@ -126,6 +174,14 @@ class WebpackConfig {
126174 this . manifestPluginOptionsCallback = manifestPluginOptionsCallback ;
127175 }
128176
177+ configureUglifyJsPlugin ( uglifyJsPluginOptionsCallback = ( ) => { } ) {
178+ if ( typeof uglifyJsPluginOptionsCallback !== 'function' ) {
179+ throw new Error ( 'Argument 1 to configureUglifyJsPlugin() must be a callback function' ) ;
180+ }
181+
182+ this . uglifyJsPluginOptionsCallback = uglifyJsPluginOptionsCallback ;
183+ }
184+
129185 /**
130186 * Returns the value that should be used as the publicPath,
131187 * which can be overridden by enabling the webpackDevServer
0 commit comments