Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion generate-types-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ module.exports = {
nameMapping: {
FsStats: /^Stats Import fs/,
validateFunction: /^validate Import/,
Configuration: /^WebpackOptions /
Configuration: /^WebpackOptions /,
MultiConfiguration: /^MultiWebpackOptions /
},
exclude: [/^devServer in WebpackOptions /],
include: [/^(_module|_compilation|_compiler) in NormalModuleLoaderContext /]
Expand Down
5 changes: 4 additions & 1 deletion lib/MultiCompiler.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const ArrayQueue = require("./util/ArrayQueue");

/** @template T @typedef {import("tapable").AsyncSeriesHook<T>} AsyncSeriesHook<T> */
/** @template T @template R @typedef {import("tapable").SyncBailHook<T, R>} SyncBailHook<T, R> */
/** @typedef {import("../declarations/WebpackOptions").WebpackOptions} WebpackOptions */
/** @typedef {import("../declarations/WebpackOptions").WatchOptions} WatchOptions */
/** @typedef {import("./Compiler")} Compiler */
/** @typedef {import("./Stats")} Stats */
Expand Down Expand Up @@ -44,6 +45,8 @@ const ArrayQueue = require("./util/ArrayQueue");
* @property {number=} parallelism how many Compilers are allows to run at the same time in parallel
*/

/** @typedef {ReadonlyArray<WebpackOptions> & MultiCompilerOptions} MultiWebpackOptions */

const CLASS_NAME = "MultiCompiler";

module.exports = class MultiCompiler {
Expand Down Expand Up @@ -576,7 +579,7 @@ module.exports = class MultiCompiler {
}

/**
* @param {WatchOptions|WatchOptions[]} watchOptions the watcher's options
* @param {WatchOptions | WatchOptions[]} watchOptions the watcher's options
* @param {Callback<MultiStats>} handler signals when the call finishes
* @returns {MultiWatching} a compiler watcher
*/
Expand Down
11 changes: 8 additions & 3 deletions lib/MultiStats.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ const indent = (str, prefix) => {
return prefix + rem;
};

/** @typedef {undefined | string | boolean | StatsOptions} ChildrenStatsOptions */
/** @typedef {Omit<StatsOptions, "children"> & { children?: ChildrenStatsOptions | ChildrenStatsOptions[] }} MultiStatsOptions */
/** @typedef {{ version: boolean, hash: boolean, errorsCount: boolean, warningsCount: boolean, errors: boolean, warnings: boolean, children: NormalizedStatsOptions[] }} ChildOptions */

class MultiStats {
Expand Down Expand Up @@ -54,7 +56,7 @@ class MultiStats {
}

/**
* @param {string | boolean | StatsOptions | undefined} options stats options
* @param {undefined | string | boolean | MultiStatsOptions} options stats options
* @param {CreateStatsOptionsContext} context context
* @returns {ChildOptions} context context
*/
Expand All @@ -80,6 +82,9 @@ class MultiStats {
const childOptions = Array.isArray(childrenOptions)
? childrenOptions[idx]
: childrenOptions;
if (typeof childOptions === "boolean") {
return stat.compilation.createStatsOptions(childOptions, context);
}
return stat.compilation.createStatsOptions(
{
...baseOptions,
Expand All @@ -104,7 +109,7 @@ class MultiStats {
}

/**
* @param {(string | boolean | StatsOptions)=} options stats options
* @param {(string | boolean | MultiStatsOptions)=} options stats options
* @returns {StatsCompilation} json output
*/
toJson(options) {
Expand Down Expand Up @@ -179,7 +184,7 @@ class MultiStats {
}

/**
* @param {(string | boolean | StatsOptions)=} options stats options
* @param {(string | boolean | MultiStatsOptions)=} options stats options
* @returns {string} string output
*/
toString(options) {
Expand Down
7 changes: 6 additions & 1 deletion lib/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -840,7 +840,12 @@ const init = (open, close, replace) =>
}} Colors */

/**
* @param {{ useColor?: boolean }=} options options
* @typedef {object} ColorsOptions
* @property {boolean=} useColor force use colors
*/

/**
* @param {ColorsOptions=} options options
* @returns {Colors} colors
*/
const createColors = ({ useColor = isColorSupported() } = {}) => ({
Expand Down
10 changes: 7 additions & 3 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,18 @@ const memoize = require("./util/memoize");
/** @typedef {import("./Compiler").AssetEmittedInfo} AssetEmittedInfo */
/** @typedef {import("./Entrypoint")} Entrypoint */
/** @typedef {import("./MultiCompiler").MultiCompilerOptions} MultiCompilerOptions */
/** @typedef {import("./MultiCompiler").MultiWebpackOptions} MultiConfiguration */
/** @typedef {import("./MultiStats")} MultiStats */
/** @typedef {import("./MultiStats").MultiStatsOptions} MultiStatsOptions */
/** @typedef {import("./NormalModuleFactory").ResolveData} ResolveData */
/** @typedef {import("./Parser").ParserState} ParserState */
/** @typedef {import("./ResolverFactory").ResolvePluginInstance} ResolvePluginInstance */
/** @typedef {import("./ResolverFactory").Resolver} Resolver */
/** @typedef {import("./Watching")} Watching */
/** @typedef {import("./cli").Argument} Argument */
/** @typedef {import("./cli").Problem} Problem */
/** @typedef {import("./cli").Colors} Colors */
/** @typedef {import("./cli").ColorsOptions} ColorsOptions */
/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsAsset} StatsAsset */
/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunk} StatsChunk */
/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunkGroup} StatsChunkGroup */
Expand Down Expand Up @@ -132,16 +136,16 @@ module.exports = mergeExports(fn, {
return require("./webpack");
},
/**
* @returns {(configuration: Configuration | Configuration[]) => void} validate fn
* @returns {(configuration: Configuration | MultiConfiguration) => void} validate fn
*/
get validate() {
const webpackOptionsSchemaCheck =
/** @type {(configuration: Configuration | Configuration[]) => boolean} */
/** @type {(configuration: Configuration | MultiConfiguration) => boolean} */
(require("../schemas/WebpackOptions.check"));

const getRealValidate = memoize(
/**
* @returns {(configuration: Configuration | Configuration[]) => void} validate fn
* @returns {(configuration: Configuration | MultiConfiguration) => void} validate fn
*/
() => {
const validateSchema = require("./validateSchema");
Expand Down
2 changes: 1 addition & 1 deletion lib/javascript/JavascriptModulesPlugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ const printGeneratedCodeForStack = (module, code) => {
* @property {SyncWaterfallHook<[Source, RenderContext]>} render
* @property {SyncWaterfallHook<[Source, Module, StartupRenderContext]>} renderStartup
* @property {SyncWaterfallHook<[string, RenderBootstrapContext]>} renderRequire
* @property {SyncBailHook<[Module, RenderBootstrapContext], string | void>} inlineInRuntimeBailout
* @property {SyncBailHook<[Module, Partial<RenderBootstrapContext>], string | void>} inlineInRuntimeBailout
* @property {SyncBailHook<[Module, RenderContext], string | void>} embedInRuntimeBailout
* @property {SyncBailHook<[RenderContext], string | void>} strictRuntimeBailout
* @property {SyncHook<[Chunk, Hash, ChunkHashContext]>} chunkHash
Expand Down
5 changes: 5 additions & 0 deletions lib/library/ModuleLibraryPlugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
const { ConcatSource } = require("webpack-sources");
const RuntimeGlobals = require("../RuntimeGlobals");
const Template = require("../Template");
const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
const ConcatenatedModule = require("../optimize/ConcatenatedModule");
const propertyAccess = require("../util/propertyAccess");
const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
Expand Down Expand Up @@ -68,6 +69,10 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
const { exportsDefinitions } =
ConcatenatedModule.getCompilationHooks(compilation);
exportsDefinitions.tap(PLUGIN_NAME, (definitions, module) => {
const bailout = JavascriptModulesPlugin.getCompilationHooks(
compilation
).inlineInRuntimeBailout.call(module, {});
if (bailout) return false;
// If we have connections not all modules were concatenated, so we need the wrapper
const connections =
compilation.moduleGraph.getIncomingConnections(module);
Expand Down
10 changes: 5 additions & 5 deletions lib/stats/DefaultStatsPresetPlugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,31 +144,31 @@ const NAMED_PRESETS = {
};

/**
* @param {Partial<NormalizedStatsOptions>} all stats option
* @param {Partial<NormalizedStatsOptions>} all stats options
* @returns {boolean} true when enabled, otherwise false
*/
const NORMAL_ON = ({ all }) => all !== false;
/**
* @param {Partial<NormalizedStatsOptions>} all stats option
* @param {Partial<NormalizedStatsOptions>} all stats options
* @returns {boolean} true when enabled, otherwise false
*/
const NORMAL_OFF = ({ all }) => all === true;
/**
* @param {Partial<NormalizedStatsOptions>} all stats option
* @param {Partial<NormalizedStatsOptions>} all stats options
* @param {CreateStatsOptionsContext} forToString stats options context
* @returns {boolean} true when enabled, otherwise false
*/
const ON_FOR_TO_STRING = ({ all }, { forToString }) =>
forToString ? all !== false : all === true;
/**
* @param {Partial<NormalizedStatsOptions>} all stats option
* @param {Partial<NormalizedStatsOptions>} all stats options
* @param {CreateStatsOptionsContext} forToString stats options context
* @returns {boolean} true when enabled, otherwise false
*/
const OFF_FOR_TO_STRING = ({ all }, { forToString }) =>
forToString ? all === true : all !== false;
/**
* @param {Partial<NormalizedStatsOptions>} all stats option
* @param {Partial<NormalizedStatsOptions>} all stats options
* @param {CreateStatsOptionsContext} forToString stats options context
* @returns {boolean | "auto"} true when enabled, otherwise false
*/
Expand Down
20 changes: 12 additions & 8 deletions lib/webpack.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const memoize = require("./util/memoize");
/** @typedef {import("../declarations/WebpackOptions").WebpackPluginFunction} WebpackPluginFunction */
/** @typedef {import("./Compiler").WatchOptions} WatchOptions */
/** @typedef {import("./MultiCompiler").MultiCompilerOptions} MultiCompilerOptions */
/** @typedef {import("./MultiCompiler").MultiWebpackOptions} MultiWebpackOptions */
/** @typedef {import("./MultiStats")} MultiStats */
/** @typedef {import("./Stats")} Stats */

Expand Down Expand Up @@ -100,14 +101,14 @@ const createCompiler = (rawOptions, compilerIndex) => {
* @callback WebpackFunctionSingle
* @param {WebpackOptions} options options object
* @param {Callback<Stats>=} callback callback
* @returns {Compiler} the compiler object
* @returns {Compiler | null} the compiler object
*/

/**
* @callback WebpackFunctionMulti
* @param {ReadonlyArray<WebpackOptions> & MultiCompilerOptions} options options objects
* @param {MultiWebpackOptions} options options objects
* @param {Callback<MultiStats>=} callback callback
* @returns {MultiCompiler} the multi compiler object
* @returns {MultiCompiler | null} the multi compiler object
*/

/**
Expand All @@ -118,12 +119,15 @@ const createCompiler = (rawOptions, compilerIndex) => {
const asArray = (options) =>
Array.isArray(options) ? [...options] : [options];

/**
* @callback WebpackCallback
* @param {WebpackOptions | MultiWebpackOptions} options options
* @param {Callback<Stats> & Callback<MultiStats>=} callback callback
* @returns {Compiler | MultiCompiler | null} Compiler or MultiCompiler
*/

const webpack = /** @type {WebpackFunctionSingle & WebpackFunctionMulti} */ (
/**
* @param {WebpackOptions | (ReadonlyArray<WebpackOptions> & MultiCompilerOptions)} options options
* @param {Callback<Stats> & Callback<MultiStats>=} callback callback
* @returns {Compiler | MultiCompiler | null} Compiler or MultiCompiler
*/
/** @type {WebpackCallback} */
(options, callback) => {
const create = () => {
if (!asArray(options).every(webpackOptionsSchemaCheck)) {
Expand Down
Loading
Loading