Skip to content

Commit ef992c1

Browse files
committed
Replace duplicated 'options callback' logic by an utility method
1 parent ecb623c commit ef992c1

20 files changed

+95
-208
lines changed

lib/config-generator.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ class ConfigGenerator {
200200
if (this.webpackConfig.useVueLoader) {
201201
rules.push({
202202
test: /\.vue$/,
203-
use: vueLoaderUtil.getLoaders(this.webpackConfig, this.webpackConfig.vueLoaderOptionsCallback)
203+
use: vueLoaderUtil.getLoaders(this.webpackConfig)
204204
});
205205
}
206206

lib/loaders/babel.js

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
'use strict';
1111

1212
const loaderFeatures = require('../features');
13+
const applyOptionsCallback = require('../utils/apply-options-callback');
1314

1415
/**
1516
* @param {WebpackConfig} webpackConfig
@@ -67,16 +68,7 @@ module.exports = {
6768
}
6869
}
6970

70-
// allow for babel config to be controlled
71-
const callbackResult = webpackConfig.babelConfigurationCallback.apply(
72-
// use babelConfig as the this variable
73-
babelConfig,
74-
[babelConfig]
75-
);
76-
77-
if (callbackResult instanceof Object) {
78-
babelConfig = callbackResult;
79-
}
71+
babelConfig = applyOptionsCallback(webpackConfig.babelConfigurationCallback, babelConfig);
8072
}
8173

8274
return [

lib/loaders/coffee-script.js

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
'use strict';
1111

1212
const loaderFeatures = require('../features');
13+
const applyOptionsCallback = require('../utils/apply-options-callback');
1314

1415
/**
1516
* @param {WebpackConfig} webpackConfig
@@ -19,27 +20,17 @@ module.exports = {
1920
getLoaders(webpackConfig) {
2021
loaderFeatures.ensurePackagesExist('coffeescript');
2122

22-
let options = {
23+
const options = {
2324
sourceMap: webpackConfig.useSourceMaps,
2425
transpile: {
2526
presets: ['env']
2627
}
2728
};
2829

29-
// allow options to be configured
30-
const callbackResult = webpackConfig.coffeeScriptConfigurationCallback.apply(
31-
options,
32-
[options]
33-
);
34-
35-
if (callbackResult instanceof Object) {
36-
options = callbackResult;
37-
}
38-
3930
return [
4031
{
4132
loader: 'coffee-loader',
42-
options: options,
33+
options: applyOptionsCallback(webpackConfig.coffeeScriptConfigurationCallback, options)
4334
},
4435
];
4536
}

lib/loaders/css.js

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
'use strict';
1111

1212
const loaderFeatures = require('../features');
13+
const applyOptionsCallback = require('../utils/apply-options-callback');
1314

1415
/**
1516
* @param {WebpackConfig} webpackConfig
@@ -38,24 +39,13 @@ module.exports = {
3839
if (usePostCssLoader) {
3940
loaderFeatures.ensurePackagesExist('postcss');
4041

41-
let postCssLoaderOptions = {
42+
const postCssLoaderOptions = {
4243
sourceMap: webpackConfig.useSourceMaps
4344
};
4445

45-
// allow options to be configured
46-
const callbackResult = webpackConfig.postCssLoaderOptionsCallback.apply(
47-
// use config as the this variable
48-
postCssLoaderOptions,
49-
[postCssLoaderOptions]
50-
);
51-
52-
if (callbackResult instanceof Object) {
53-
postCssLoaderOptions = callbackResult;
54-
}
55-
5646
cssLoaders.push({
5747
loader: 'postcss-loader',
58-
options: postCssLoaderOptions
48+
options: applyOptionsCallback(webpackConfig.postCssLoaderOptionsCallback, postCssLoaderOptions)
5949
});
6050
}
6151

lib/loaders/less.js

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const loaderFeatures = require('../features');
1313
const cssLoader = require('./css');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {WebpackConfig} webpackConfig
@@ -21,26 +22,15 @@ module.exports = {
2122
getLoaders(webpackConfig, ignorePostCssLoader = false) {
2223
loaderFeatures.ensurePackagesExist('less');
2324

24-
let config = {
25+
const config = {
2526
sourceMap: webpackConfig.useSourceMaps
2627
};
2728

28-
// allow options to be configured
29-
const callbackResult = webpackConfig.lessLoaderOptionsCallback.apply(
30-
// use config as the this variable
31-
config,
32-
[config]
33-
);
34-
35-
if (callbackResult instanceof Object) {
36-
config = callbackResult;
37-
}
38-
3929
return [
4030
...cssLoader.getLoaders(webpackConfig, ignorePostCssLoader),
4131
{
4232
loader: 'less-loader',
43-
options: config
33+
options: applyOptionsCallback(webpackConfig.lessLoaderOptionsCallback, config)
4434
},
4535
];
4636
}

lib/loaders/sass.js

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const loaderFeatures = require('../features');
1313
const cssLoader = require('./css');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {WebpackConfig} webpackConfig
@@ -35,25 +36,14 @@ module.exports = {
3536
});
3637
}
3738

38-
let config = Object.assign({}, sassOptions, {
39+
const config = Object.assign({}, sassOptions, {
3940
// needed by the resolve-url-loader
4041
sourceMap: (true === webpackConfig.sassOptions.resolveUrlLoader) || webpackConfig.useSourceMaps
4142
});
4243

43-
// allow options to be configured
44-
const callbackResult = webpackConfig.sassLoaderOptionsCallback.apply(
45-
// use config as the this variable
46-
config,
47-
[config]
48-
);
49-
50-
if (callbackResult instanceof Object) {
51-
config = callbackResult;
52-
}
53-
5444
sassLoaders.push({
5545
loader: 'sass-loader',
56-
options: config,
46+
options: applyOptionsCallback(webpackConfig.sassLoaderOptionsCallback, config)
5747
});
5848

5949
return sassLoaders;

lib/loaders/stylus.js

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const loaderFeatures = require('../features');
1313
const cssLoader = require('./css');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {WebpackConfig} webpackConfig
@@ -21,26 +22,15 @@ module.exports = {
2122
getLoaders(webpackConfig, ignorePostCssLoader = false) {
2223
loaderFeatures.ensurePackagesExist('stylus');
2324

24-
let config = {
25+
const config = {
2526
sourceMap: webpackConfig.useSourceMaps
2627
};
2728

28-
// allow options to be configured
29-
const callbackResult = webpackConfig.stylusLoaderOptionsCallback.apply(
30-
// use config as the this variable
31-
config,
32-
[config]
33-
);
34-
35-
if (callbackResult instanceof Object) {
36-
config = callbackResult;
37-
}
38-
3929
return [
4030
...cssLoader.getLoaders(webpackConfig, ignorePostCssLoader),
4131
{
4232
loader: 'stylus-loader',
43-
options: config
33+
options: applyOptionsCallback(webpackConfig.stylusLoaderOptionsCallback, config)
4434
},
4535
];
4636
}

lib/loaders/typescript.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const loaderFeatures = require('../features');
1313
const babelLoader = require('./babel');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {WebpackConfig} webpackConfig
@@ -26,15 +27,7 @@ module.exports = {
2627
};
2728

2829
// allow for ts-loader config to be controlled
29-
const callbackResult = webpackConfig.tsConfigurationCallback.apply(
30-
// use config as the this variable
31-
config,
32-
[config]
33-
);
34-
35-
if (callbackResult instanceof Object) {
36-
config = callbackResult;
37-
}
30+
config = applyOptionsCallback(webpackConfig.tsConfigurationCallback, config);
3831

3932
// fork-ts-checker-webpack-plugin integration
4033
if (webpackConfig.useForkedTypeScriptTypeChecking) {

lib/loaders/vue.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ const sassLoaderUtil = require('./sass');
1515
const lessLoaderUtil = require('./less');
1616
const babelLoaderUtil = require('./babel');
1717
const extractText = require('./extract-text');
18+
const applyOptionsCallback = require('../utils/apply-options-callback');
1819

1920
/**
2021
* @param {WebpackConfig} webpackConfig
21-
* @param {function} vueLoaderOptionsCallback
2222
* @return {Array} of loaders to use for Vue files
2323
*/
2424
module.exports = {
25-
getLoaders(webpackConfig, vueLoaderOptionsCallback) {
25+
getLoaders(webpackConfig) {
2626
loaderFeatures.ensurePackagesExist('vue');
2727

2828
/*
@@ -117,21 +117,14 @@ module.exports = {
117117
};
118118
}
119119

120-
let options = {
120+
const options = {
121121
loaders: loaders
122122
};
123123

124-
// allow the options to be mutated via a callback
125-
const callbackResult = vueLoaderOptionsCallback(options);
126-
127-
if (callbackResult instanceof Object) {
128-
options = callbackResult;
129-
}
130-
131124
return [
132125
{
133126
loader: 'vue-loader',
134-
options: options
127+
options: applyOptionsCallback(webpackConfig.vueLoaderOptionsCallback, options)
135128
}
136129
];
137130
}

lib/plugins/clean.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const CleanWebpackPlugin = require('clean-webpack-plugin');
1313
const PluginPriorities = require('./plugin-priorities');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* Updates plugins array passed adding CleanWebpackPlugin instance
@@ -25,24 +26,15 @@ module.exports = function(plugins, webpackConfig) {
2526
return;
2627
}
2728

28-
let cleanWebpackPluginOptions = {
29+
const cleanWebpackPluginOptions = {
2930
root: webpackConfig.outputPath,
3031
verbose: false,
3132
};
3233

33-
const callbackResult = webpackConfig.cleanWebpackPluginOptionsCallback.apply(
34-
cleanWebpackPluginOptions,
35-
[cleanWebpackPluginOptions]
36-
);
37-
38-
if (callbackResult instanceof Object) {
39-
cleanWebpackPluginOptions = callbackResult;
40-
}
41-
4234
plugins.push({
4335
plugin: new CleanWebpackPlugin(
4436
webpackConfig.cleanWebpackPluginPaths,
45-
cleanWebpackPluginOptions
37+
applyOptionsCallback(webpackConfig.cleanWebpackPluginOptionsCallback, cleanWebpackPluginOptions)
4638
),
4739
priority: PluginPriorities.CleanWebpackPlugin
4840
});

lib/plugins/define.js

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,24 @@
1111

1212
const webpack = require('webpack');
1313
const PluginPriorities = require('./plugin-priorities');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {Array} plugins
1718
* @param {WebpackConfig} webpackConfig
1819
* @return {void}
1920
*/
2021
module.exports = function(plugins, webpackConfig) {
21-
let definePluginOptions = {
22+
const definePluginOptions = {
2223
'process.env': {
2324
NODE_ENV: webpackConfig.isProduction() ? '"production"' : '"development"'
2425
}
2526
};
2627

27-
const callbackResult = webpackConfig.definePluginOptionsCallback.apply(
28-
definePluginOptions,
29-
[definePluginOptions]
30-
);
31-
32-
if (callbackResult instanceof Object) {
33-
definePluginOptions = callbackResult;
34-
}
35-
3628
plugins.push({
37-
plugin: new webpack.DefinePlugin(definePluginOptions),
29+
plugin: new webpack.DefinePlugin(
30+
applyOptionsCallback(webpackConfig.definePluginOptionsCallback, definePluginOptions)
31+
),
3832
priority: PluginPriorities.DefinePlugin
3933
});
4034
};

lib/plugins/extract-text.js

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const ExtractTextPlugin = require('extract-text-webpack-plugin');
1313
const PluginPriorities = require('./plugin-priorities');
14+
const applyOptionsCallback = require('../utils/apply-options-callback');
1415

1516
/**
1617
* @param {Array} plugins
@@ -37,25 +38,18 @@ module.exports = function(plugins, webpackConfig) {
3738
filename = webpackConfig.configuredFilenames.css;
3839
}
3940

40-
let extractTextPluginOptions = {
41+
const extractTextPluginOptions = {
4142
filename: filename,
4243
// if true, async CSS (e.g. loaded via require.ensure())
4344
// is extracted to the entry point CSS. If false, it's
4445
// inlined in the AJAX-loaded .js file.
4546
allChunks: false
4647
};
4748

48-
const callbackResult = webpackConfig.extractTextPluginOptionsCallback.apply(
49-
extractTextPluginOptions,
50-
[extractTextPluginOptions]
51-
);
52-
53-
if (callbackResult instanceof Object) {
54-
extractTextPluginOptions = callbackResult;
55-
}
56-
5749
plugins.push({
58-
plugin: new ExtractTextPlugin(extractTextPluginOptions),
50+
plugin: new ExtractTextPlugin(
51+
applyOptionsCallback(webpackConfig.extractTextPluginOptionsCallback, extractTextPluginOptions)
52+
),
5953
priority: PluginPriorities.ExtractTextWebpackPlugin
6054
});
6155
};

0 commit comments

Comments
 (0)