From 9bce51f651aad297ef9eb6df832bfdaf1de05d84 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 22 四月 2026 14:27:54 +0800
Subject: [PATCH] 青岛推送

---
 node_modules/webpack/lib/ProgressPlugin.js |   91 ++++++++++++++++++++++++++++++---------------
 1 files changed, 61 insertions(+), 30 deletions(-)

diff --git a/node_modules/webpack/lib/ProgressPlugin.js b/node_modules/webpack/lib/ProgressPlugin.js
index 82d26bb..f99bdec 100644
--- a/node_modules/webpack/lib/ProgressPlugin.js
+++ b/node_modules/webpack/lib/ProgressPlugin.js
@@ -8,15 +8,16 @@
 const Compiler = require("./Compiler");
 const MultiCompiler = require("./MultiCompiler");
 const NormalModule = require("./NormalModule");
-const createSchemaValidation = require("./util/create-schema-validation");
 const { contextify } = require("./util/identifier");
 
 /** @typedef {import("tapable").Tap} Tap */
 /**
+ * Defines the hook type used by this module.
  * @template T, R, AdditionalOptions
  * @typedef {import("tapable").Hook<T, R, AdditionalOptions>} Hook
  */
 /** @typedef {import("../declarations/plugins/ProgressPlugin").ProgressPluginArgument} ProgressPluginArgument */
+/** @typedef {import("../declarations/plugins/ProgressPlugin").ProgressPluginOptions} ProgressPluginOptions */
 /** @typedef {import("./Compilation").FactorizeModuleOptions} FactorizeModuleOptions */
 /** @typedef {import("./Dependency")} Dependency */
 /** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
@@ -25,26 +26,20 @@
 /** @typedef {import("./logging/Logger").Logger} Logger */
 
 /**
+ * Defines the async queue type used by this module.
  * @template T, K, R
  * @typedef {import("./util/AsyncQueue")<T, K, R>} AsyncQueue
  */
 
 /**
+ * Defines the counts data type used by this module.
  * @typedef {object} CountsData
  * @property {number} modulesCount modules count
  * @property {number} dependenciesCount dependencies count
  */
 
-const validate = createSchemaValidation(
-	require("../schemas/plugins/ProgressPlugin.check"),
-	() => require("../schemas/plugins/ProgressPlugin.json"),
-	{
-		name: "Progress Plugin",
-		baseDataPath: "options"
-	}
-);
-
 /**
+ * Returns median.
  * @param {number} a a
  * @param {number} b b
  * @param {number} c c
@@ -55,6 +50,7 @@
 /** @typedef {(percentage: number, msg: string, ...args: string[]) => void} HandlerFn */
 
 /**
+ * Creates a default handler.
  * @param {boolean | null | undefined} profile need profile
  * @param {Logger} logger logger
  * @returns {HandlerFn} default handler
@@ -131,6 +127,7 @@
 const SKIPPED_QUEUE_CONTEXTS = ["import-module", "load-module"];
 
 /**
+ * Defines the report progress callback.
  * @callback ReportProgress
  * @param {number} p percentage
  * @param {...string} args additional arguments
@@ -142,8 +139,21 @@
 
 const PLUGIN_NAME = "ProgressPlugin";
 
+/** @type {Required<Omit<ProgressPluginOptions, "handler">>} */
+const DEFAULT_OPTIONS = {
+	profile: false,
+	modulesCount: 5000,
+	dependenciesCount: 10000,
+	modules: true,
+	dependencies: true,
+	activeModules: false,
+	entries: true,
+	percentBy: null
+};
+
 class ProgressPlugin {
 	/**
+	 * Returns a progress reporter, if any.
 	 * @param {Compiler} compiler the current compiler
 	 * @returns {ReportProgress | undefined} a progress reporter, if any
 	 */
@@ -152,6 +162,7 @@
 	}
 
 	/**
+	 * Creates an instance of ProgressPlugin.
 	 * @param {ProgressPluginArgument} options options
 	 */
 	constructor(options = {}) {
@@ -161,21 +172,23 @@
 			};
 		}
 
-		validate(options);
-		options = { ...ProgressPlugin.defaultOptions, ...options };
+		/** @type {ProgressPluginOptions} */
+		this.options = options;
 
-		this.profile = options.profile;
-		this.handler = options.handler;
-		this.modulesCount = options.modulesCount;
-		this.dependenciesCount = options.dependenciesCount;
-		this.showEntries = options.entries;
-		this.showModules = options.modules;
-		this.showDependencies = options.dependencies;
-		this.showActiveModules = options.activeModules;
-		this.percentBy = options.percentBy;
+		const merged = { ...DEFAULT_OPTIONS, ...options };
+		this.profile = merged.profile;
+		this.handler = merged.handler;
+		this.modulesCount = merged.modulesCount;
+		this.dependenciesCount = merged.dependenciesCount;
+		this.showEntries = merged.entries;
+		this.showModules = merged.modules;
+		this.showDependencies = merged.dependencies;
+		this.showActiveModules = merged.activeModules;
+		this.percentBy = merged.percentBy;
 	}
 
 	/**
+	 * Applies the plugin by registering its hooks on the compiler.
 	 * @param {Compiler | MultiCompiler} compiler webpack compiler
 	 * @returns {void}
 	 */
@@ -194,6 +207,7 @@
 	}
 
 	/**
+	 * Apply on multi compiler.
 	 * @param {MultiCompiler} compiler webpack multi-compiler
 	 * @param {HandlerFn} handler function that executes for every progress step
 	 * @returns {void}
@@ -213,11 +227,24 @@
 	}
 
 	/**
+	 * Processes the provided compiler.
 	 * @param {Compiler} compiler webpack compiler
 	 * @param {HandlerFn} handler function that executes for every progress step
 	 * @returns {void}
 	 */
 	_applyOnCompiler(compiler, handler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../schemas/plugins/ProgressPlugin.json"),
+				this.options,
+				{
+					name: "Progress Plugin",
+					baseDataPath: "options"
+				},
+				(options) => require("../schemas/plugins/ProgressPlugin.check")(options)
+			);
+		});
+
 		const showEntries = this.showEntries;
 		const showModules = this.showModules;
 		const showDependencies = this.showDependencies;
@@ -235,6 +262,7 @@
 		let doneModules = 0;
 		let doneDependencies = 0;
 		let doneEntries = 0;
+		/** @type {Set<string>} */
 		const activeModules = new Set();
 		let lastUpdate = 0;
 
@@ -254,6 +282,7 @@
 			const percentByDependencies =
 				doneDependencies /
 				Math.max(lastDependenciesCount || 1, dependenciesCount);
+			/** @type {number} */
 			let percentageFactor;
 
 			switch (this.percentBy) {
@@ -285,6 +314,7 @@
 					)}`
 				);
 			} else {
+				/** @type {string[]} */
 				const statItems = [];
 				if (showEntries) {
 					statItems.push(`${doneEntries}/${entriesCount} entries`);
@@ -312,6 +342,7 @@
 		};
 
 		/**
+		 * Processes the provided factorize queue.
 		 * @template T
 		 * @param {AsyncQueue<FactorizeModuleOptions, string, Module | ModuleFactoryResult>} factorizeQueue async queue
 		 * @param {T} _item item
@@ -334,6 +365,7 @@
 		};
 
 		/**
+		 * Processes the provided add module queue.
 		 * @template T
 		 * @param {AsyncQueue<Module, string, Module>} addModuleQueue async queue
 		 * @param {T} _item item
@@ -348,6 +380,7 @@
 
 		// only used when showActiveModules is set
 		/**
+		 * Processes the provided module.
 		 * @param {Module} module the module
 		 */
 		const moduleBuild = (module) => {
@@ -360,6 +393,7 @@
 		};
 
 		/**
+		 * Processes the provided entry.
 		 * @param {Dependency} entry entry dependency
 		 * @param {EntryOptions} options options object
 		 */
@@ -369,6 +403,7 @@
 		};
 
 		/**
+		 * Processes the provided module.
 		 * @param {Module} module the module
 		 */
 		const moduleDone = (module) => {
@@ -391,6 +426,7 @@
 		};
 
 		/**
+		 * Processes the provided entry.
 		 * @param {Dependency} entry entry dependency
 		 * @param {EntryOptions} options options object
 		 */
@@ -480,6 +516,7 @@
 
 			// @ts-expect-error avoid dynamic require if bundled with webpack
 			if (typeof __webpack_require__ !== "function") {
+				/** @type {Set<string>} */
 				const requiredLoaders = new Set();
 				NormalModule.getCompilationHooks(compilation).beforeLoaders.tap(
 					PLUGIN_NAME,
@@ -584,6 +621,7 @@
 			}
 		});
 		/**
+		 * Processes the provided hook.
 		 * @template {Hook<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>} T
 		 * @param {T} hook hook
 		 * @param {number} progress progress from 0 to 1
@@ -607,6 +645,7 @@
 					handler(progress, category, name);
 				},
 				/**
+				 * Processes the provided tap.
 				 * @param {Tap} tap tap
 				 */
 				tap(tap) {
@@ -693,15 +732,7 @@
 	}
 }
 
-ProgressPlugin.defaultOptions = {
-	profile: false,
-	modulesCount: 5000,
-	dependenciesCount: 10000,
-	modules: true,
-	dependencies: true,
-	activeModules: false,
-	entries: true
-};
+ProgressPlugin.defaultOptions = DEFAULT_OPTIONS;
 
 ProgressPlugin.createDefaultHandler = createDefaultHandler;
 

--
Gitblit v1.9.3