Skip to content

Commit b31b345

Browse files
committed
Add more precise JSDoc for the options callbacks
Most of them are documented as receiving an object and returning an object or void. But some callbacks dealing with parts of the webpack configuration itself have a more precise type for the options object.
1 parent ee6097c commit b31b345

File tree

4 files changed

+166
-29
lines changed

4 files changed

+166
-29
lines changed

index.js

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
* @import webpack from 'webpack'
1414
*/
1515

16+
/**
17+
* @import { OptionsCallback } from './lib/utils/apply-options-callback.js'
18+
*/
19+
1620
const EncoreProxy = require('./lib/EncoreProxy');
1721
const WebpackConfig = require('./lib/WebpackConfig');
1822
const configGenerator = require('./lib/config-generator');
@@ -117,7 +121,7 @@ class Encore {
117121
* })
118122
* ```
119123
*
120-
* @param {Function} definePluginOptionsCallback
124+
* @param {OptionsCallback<ConstructorParameters<typeof webpack.DefinePlugin>[0]>} definePluginOptionsCallback
121125
* @returns {Encore}
122126
*/
123127
configureDefinePlugin(definePluginOptionsCallback = () => {}) {
@@ -138,7 +142,7 @@ class Encore {
138142
* })
139143
* ```
140144
*
141-
* @param {Function} friendlyErrorsPluginOptionsCallback
145+
* @param {OptionsCallback<object>} friendlyErrorsPluginOptionsCallback
142146
* @returns {Encore}
143147
*/
144148
configureFriendlyErrorsPlugin(friendlyErrorsPluginOptionsCallback = () => {}) {
@@ -159,7 +163,7 @@ class Encore {
159163
* })
160164
* ```
161165
*
162-
* @param {Function} manifestPluginOptionsCallback
166+
* @param {OptionsCallback<object>} manifestPluginOptionsCallback
163167
* @returns {Encore}
164168
*/
165169
configureManifestPlugin(manifestPluginOptionsCallback = () => {}) {
@@ -185,7 +189,7 @@ class Encore {
185189
* })
186190
* ```
187191
*
188-
* @param {Function} terserPluginOptionsCallback
192+
* @param {OptionsCallback<import('terser-webpack-plugin').BasePluginOptions & import('terser-webpack-plugin').DefinedDefaultMinimizerAndOptions<import('terser').MinifyOptions>>} terserPluginOptionsCallback
189193
* @returns {Encore}
190194
*/
191195
configureTerserPlugin(terserPluginOptionsCallback = () => {}) {
@@ -206,7 +210,7 @@ class Encore {
206210
* })
207211
* ```
208212
*
209-
* @param {Function} cssMinimizerPluginOptionsCallback
213+
* @param {OptionsCallback<import('css-minimizer-webpack-plugin').BasePluginOptions & import('css-minimizer-webpack-plugin').DefinedDefaultMinimizerAndOptions<import('css-minimizer-webpack-plugin').CssNanoOptionsExtended>>} cssMinimizerPluginOptionsCallback
210214
* @returns {Encore}
211215
*/
212216
configureCssMinimizerPlugin(cssMinimizerPluginOptionsCallback = () => {}) {
@@ -669,7 +673,7 @@ class Encore {
669673
* });
670674
* ```
671675
*
672-
* @param {Function} callback
676+
* @param {OptionsCallback<object>} callback
673677
* @returns {Encore}
674678
*/
675679
configureSplitChunks(callback) {
@@ -691,7 +695,7 @@ class Encore {
691695
* });
692696
* ```
693697
*
694-
* @param {Function} callback
698+
* @param {OptionsCallback<Exclude<webpack.Configuration['watchOptions'], undefined>>} callback
695699
* @returns {Encore}
696700
*/
697701
configureWatchOptions(callback) {
@@ -718,7 +722,7 @@ class Encore {
718722
* });
719723
* ```
720724
*
721-
* @param {Function} callback
725+
* @param {OptionsCallback<import('webpack-dev-server').Configuration>} callback
722726
* @returns {Encore}
723727
*/
724728
configureDevServerOptions(callback) {
@@ -794,7 +798,7 @@ class Encore {
794798
* })
795799
* ```
796800
*
797-
* @param {Function} postCssLoaderOptionsCallback
801+
* @param {OptionsCallback<object>} postCssLoaderOptionsCallback
798802
* @returns {Encore}
799803
*/
800804
enablePostCssLoader(postCssLoaderOptionsCallback = () => {}) {
@@ -834,7 +838,7 @@ class Encore {
834838
* Options parameters for resolve-url-loader
835839
* // https://www.npmjs.com/package/resolve-url-loader#options
836840
*
837-
* @param {Function} sassLoaderOptionsCallback
841+
* @param {OptionsCallback<object>} sassLoaderOptionsCallback
838842
* @param {object} encoreOptions
839843
* @returns {Encore}
840844
*/
@@ -861,7 +865,7 @@ class Encore {
861865
* });
862866
* ```
863867
*
864-
* @param {Function} lessLoaderOptionsCallback
868+
* @param {OptionsCallback<object>} lessLoaderOptionsCallback
865869
* @returns {Encore}
866870
*/
867871
enableLessLoader(lessLoaderOptionsCallback = () => {}) {
@@ -886,7 +890,7 @@ class Encore {
886890
* });
887891
* ```
888892
*
889-
* @param {Function} stylusLoaderOptionsCallback
893+
* @param {OptionsCallback<object>} stylusLoaderOptionsCallback
890894
* @returns {Encore}
891895
*/
892896
enableStylusLoader(stylusLoaderOptionsCallback = () => {}) {
@@ -966,7 +970,7 @@ class Encore {
966970
* It should contain the version of core-js you added to your project
967971
* if useBuiltIns isn't set to false.
968972
*
969-
* @param {Function|null} callback
973+
* @param {OptionsCallback<object>|null} callback
970974
* @param {object} encoreOptions
971975
* @returns {Encore}
972976
*/
@@ -992,7 +996,7 @@ class Encore {
992996
* });
993997
* ```
994998
*
995-
* @param {Function} callback
999+
* @param {OptionsCallback<object>} callback
9961000
* @returns {Encore}
9971001
*/
9981002
configureBabelPresetEnv(callback) {
@@ -1013,7 +1017,7 @@ class Encore {
10131017
* });
10141018
* ```
10151019
*
1016-
* @param {Function} callback
1020+
* @param {OptionsCallback<object>} callback
10171021
* @returns {Encore}
10181022
*/
10191023
configureCssLoader(callback) {
@@ -1056,7 +1060,7 @@ class Encore {
10561060
* ```
10571061
*
10581062
* @param {object} buildDependencies
1059-
* @param {Function} cacheCallback
1063+
* @param {OptionsCallback<webpack.FileCacheOptions>} cacheCallback
10601064
* @returns {Encore}
10611065
*/
10621066
enableBuildCache(buildDependencies, cacheCallback = (cache) => {}) {
@@ -1083,8 +1087,8 @@ class Encore {
10831087
* );
10841088
* ```
10851089
*
1086-
* @param {Function} loaderOptionsCallback
1087-
* @param {Function} pluginOptionsCallback
1090+
* @param {OptionsCallback<import('mini-css-extract-plugin').LoaderOptions>} loaderOptionsCallback
1091+
* @param {OptionsCallback<import('mini-css-extract-plugin').PluginOptions>} pluginOptionsCallback
10881092
* @returns {Encore}
10891093
*/
10901094
configureMiniCssExtractPlugin(loaderOptionsCallback, pluginOptionsCallback = () => {}) {
@@ -1149,7 +1153,7 @@ class Encore {
11491153
* });
11501154
* ```
11511155
*
1152-
* @param {Function} callback
1156+
* @param {OptionsCallback<object>} callback
11531157
* @returns {Encore}
11541158
*/
11551159
enableTypeScriptLoader(callback = () => {}) {
@@ -1164,7 +1168,7 @@ class Encore {
11641168
*
11651169
* This is a build optimization API to reduce build times.
11661170
*
1167-
* @param {Function} forkedTypeScriptTypesCheckOptionsCallback
1171+
* @param {OptionsCallback<object>} forkedTypeScriptTypesCheckOptionsCallback
11681172
* @returns {Encore}
11691173
*/
11701174
enableForkedTypeScriptTypesChecking(forkedTypeScriptTypesCheckOptionsCallback = () => {}) {
@@ -1252,7 +1256,7 @@ class Encore {
12521256
* Configure Babel to use the preset "@vue/babel-preset-jsx",
12531257
* in order to enable JSX usage in Vue components.
12541258
*
1255-
* @param {Function} vueLoaderOptionsCallback
1259+
* @param {OptionsCallback<object>} vueLoaderOptionsCallback
12561260
* @param {object} encoreOptions
12571261
* @returns {Encore}
12581262
*/
@@ -1279,7 +1283,7 @@ class Encore {
12791283
* ```
12801284
*
12811285
* @param {boolean} enabled
1282-
* @param {Function} notifierPluginOptionsCallback
1286+
* @param {OptionsCallback<object>} notifierPluginOptionsCallback
12831287
* @returns {Encore}
12841288
*/
12851289
enableBuildNotifications(enabled = true, notifierPluginOptionsCallback = () => {}) {
@@ -1304,7 +1308,7 @@ class Encore {
13041308
* });
13051309
* ```
13061310
*
1307-
* @param {Function} callback
1311+
* @param {OptionsCallback<object>} callback
13081312
* @returns {Encore}
13091313
*/
13101314
enableHandlebarsLoader(callback = () => {}) {
@@ -1351,7 +1355,7 @@ class Encore {
13511355
* });
13521356
* ```
13531357
*
1354-
* @param {Function} callback
1358+
* @param {OptionsCallback<object>} callback
13551359
* @returns {Encore}
13561360
*/
13571361
configureStyleLoader(callback) {
@@ -1438,7 +1442,7 @@ class Encore {
14381442
* ```
14391443
*
14401444
* @param {object} options
1441-
* @param {string|object|Function} ruleCallback
1445+
* @param {OptionsCallback<webpack.RuleSetRule>} ruleCallback
14421446
* @returns {Encore}
14431447
*/
14441448
configureImageRule(options = {}, ruleCallback = (rule) => {}) {
@@ -1455,7 +1459,7 @@ class Encore {
14551459
* See configureImageRule() for more details.
14561460
*
14571461
* @param {object} options
1458-
* @param {string|object|Function} ruleCallback
1462+
* @param {OptionsCallback<webpack.RuleSetRule>} ruleCallback
14591463
* @returns {Encore}
14601464
*/
14611465
configureFontRule(options = {}, ruleCallback = (rule) => {}) {
@@ -1479,7 +1483,7 @@ class Encore {
14791483
* ```
14801484
*
14811485
* @param {string} name
1482-
* @param {Function} callback
1486+
* @param {OptionsCallback<webpack.RuleSetRule>} callback
14831487
* @returns {Encore}
14841488
*/
14851489
configureLoaderRule(name, callback) {
@@ -1501,7 +1505,7 @@ class Encore {
15011505
* })
15021506
* ```
15031507
*
1504-
* @param {Function} cleanOptionsCallback
1508+
* @param {OptionsCallback<Exclude<ConstructorParameters<typeof webpack.CleanPlugin>[0], undefined>>} cleanOptionsCallback
15051509
* @returns {Encore}
15061510
*/
15071511
cleanupOutputBeforeBuild(cleanOptionsCallback = () => {}) {

0 commit comments

Comments
 (0)