diff --git a/package-lock.json b/package-lock.json index eeb47f105..b726b8938 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,7 +68,7 @@ "strip-ansi": "^6.0.0", "supertest": "^7.0.0", "typescript": "^5.3.3", - "webpack": "^5.93.0" + "webpack": "^5.101.0" }, "engines": { "node": ">= 18.12.0" diff --git a/package.json b/package.json index a5a1bd169..cc6dea935 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "strip-ansi": "^6.0.0", "supertest": "^7.0.0", "typescript": "^5.3.3", - "webpack": "^5.93.0" + "webpack": "^5.101.0" }, "peerDependencies": { "webpack": "^5.0.0" diff --git a/src/utils/setupHooks.js b/src/utils/setupHooks.js index 217d48b4f..f9b14c8de 100644 --- a/src/utils/setupHooks.js +++ b/src/utils/setupHooks.js @@ -109,8 +109,18 @@ function setupHooks(context) { childStatsOptions = normalizeStatsOptions(childStatsOptions); if (typeof childStatsOptions.colors === "undefined") { + const [firstCompiler] = + /** @type {MultiCompiler} */ + (compiler).compilers; + + // TODO remove `colorette` and set minimum supported webpack version is `5.101.0` childStatsOptions.colors = - require("colorette").isColorSupported; + typeof firstCompiler.webpack !== "undefined" && + typeof firstCompiler.webpack.cli !== "undefined" && + typeof firstCompiler.webpack.cli.isColorSupported === + "function" + ? firstCompiler.webpack.cli.isColorSupported() + : require("colorette").isColorSupported; } return childStatsOptions; @@ -122,12 +132,20 @@ function setupHooks(context) { ); if (typeof statsOptions.colors === "undefined") { - statsOptions.colors = require("colorette").isColorSupported; + const { compiler } = /** @type {{ compiler: Compiler }} */ (context); + // TODO remove `colorette` and set minimum supported webpack version is `5.101.0` + statsOptions.colors = + typeof compiler.webpack !== "undefined" && + typeof compiler.webpack.cli !== "undefined" && + typeof compiler.webpack.cli.isColorSupported === "function" + ? compiler.webpack.cli.isColorSupported() + : require("colorette").isColorSupported; } } const printedStats = stats.toString( - /** @type {StatsObjectOptions} */ (statsOptions), + /** @type {StatsObjectOptions} */ + (statsOptions), ); // Avoid extra empty line when `stats: 'none'`