From 3bd962a6d7f61239c020e2dbbeb7341e5b842dd1 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期二, 21 四月 2026 11:46:41 +0800
Subject: [PATCH] 推送

---
 node_modules/webpack/lib/CleanPlugin.js |   71 +++++++++++++++++++++++------------
 1 files changed, 47 insertions(+), 24 deletions(-)

diff --git a/node_modules/webpack/lib/CleanPlugin.js b/node_modules/webpack/lib/CleanPlugin.js
index 6fb555f..d618bba 100644
--- a/node_modules/webpack/lib/CleanPlugin.js
+++ b/node_modules/webpack/lib/CleanPlugin.js
@@ -9,7 +9,6 @@
 const asyncLib = require("neo-async");
 const { SyncBailHook } = require("tapable");
 const Compilation = require("./Compilation");
-const createSchemaValidation = require("./util/create-schema-validation");
 const { join } = require("./util/fs");
 const processAsyncTree = require("./util/processAsyncTree");
 
@@ -23,31 +22,18 @@
 /** @typedef {Map<string, number>} Assets */
 
 /**
+ * Defines the clean plugin compilation hooks type used by this module.
  * @typedef {object} CleanPluginCompilationHooks
  * @property {SyncBailHook<[string], boolean | void>} keep when returning true the file/directory will be kept during cleaning, returning false will clean it and ignore the following plugins and config
  */
 
 /**
+ * Defines the keep fn callback.
  * @callback KeepFn
  * @param {string} path path
  * @returns {boolean | undefined} true, if the path should be kept
  */
 
-const validate = createSchemaValidation(
-	undefined,
-	() => {
-		const { definitions } = require("../schemas/WebpackOptions.json");
-
-		return {
-			definitions,
-			oneOf: [{ $ref: "#/definitions/CleanOptions" }]
-		};
-	},
-	{
-		name: "Clean Plugin",
-		baseDataPath: "options"
-	}
-);
 const _10sec = 10 * 1000;
 
 /**
@@ -63,13 +49,18 @@
 	}
 };
 
+/** @typedef {Map<string, number>} CurrentAssets */
+
 /**
- * @param {Map<string, number>} assets current assets
+ * Returns set of directory paths.
+ * @param {CurrentAssets} assets current assets
  * @returns {Set<string>} Set of directory paths
  */
 function getDirectories(assets) {
+	/** @type {Set<string>} */
 	const directories = new Set();
 	/**
+	 * Adds the provided filename to this object.
 	 * @param {string} filename asset filename
 	 */
 	const addDirectory = (filename) => {
@@ -90,14 +81,16 @@
 /** @typedef {Set<string>} Diff */
 
 /**
+ * Returns diff to fs.
  * @param {OutputFileSystem} fs filesystem
  * @param {string} outputPath output path
- * @param {Map<string, number>} currentAssets filename of the current assets (must not start with .. or ., must only use / as path separator)
+ * @param {CurrentAssets} currentAssets filename of the current assets (must not start with .. or ., must only use / as path separator)
  * @param {(err?: Error | null, set?: Diff) => void} callback returns the filenames of the assets that shouldn't be there
  * @returns {void}
  */
 const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
 	const directories = getDirectories(currentAssets);
+	/** @type {Diff} */
 	const diff = new Set();
 	asyncLib.forEachLimit(
 		directories,
@@ -135,11 +128,13 @@
 };
 
 /**
+ * Gets diff to old assets.
  * @param {Assets} currentAssets assets list
  * @param {Assets} oldAssets old assets list
  * @returns {Diff} diff
  */
 const getDiffToOldAssets = (currentAssets, oldAssets) => {
+	/** @type {Diff} */
 	const diff = new Set();
 	const now = Date.now();
 	for (const [asset, ts] of oldAssets) {
@@ -150,6 +145,7 @@
 };
 
 /**
+ * Processes the provided f.
  * @param {OutputFileSystem} fs filesystem
  * @param {string} filename path to file
  * @param {StatsCallback} callback callback for provided filename
@@ -165,6 +161,7 @@
 };
 
 /**
+ * Processes the provided f.
  * @param {OutputFileSystem} fs filesystem
  * @param {string} outputPath output path
  * @param {boolean} dry only log instead of fs modification
@@ -176,6 +173,7 @@
  */
 const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
 	/**
+	 * Processes the provided msg.
 	 * @param {string} msg message
 	 */
 	const log = (msg) => {
@@ -200,6 +198,7 @@
 		({ type, filename, parent }, push, callback) => {
 			const path = join(fs, outputPath, filename);
 			/**
+			 * Describes how this handle error operation behaves.
 			 * @param {Error & { code?: string }} err error
 			 * @returns {void}
 			 */
@@ -342,6 +341,7 @@
 
 class CleanPlugin {
 	/**
+	 * Returns the attached hooks.
 	 * @param {Compilation} compilation the compilation
 	 * @returns {CleanPluginCompilationHooks} the attached hooks
 	 */
@@ -363,18 +363,38 @@
 
 	/** @param {CleanOptions} options options */
 	constructor(options = {}) {
-		validate(options);
-		this.options = { dry: false, ...options };
+		/** @type {CleanOptions} */
+		this.options = options;
 	}
 
 	/**
-	 * Apply the plugin
+	 * Applies the plugin by registering its hooks on the compiler.
 	 * @param {Compiler} compiler the compiler instance
 	 * @returns {void}
 	 */
 	apply(compiler) {
-		const { dry, keep } = this.options;
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => {
+					const { definitions } = require("../schemas/WebpackOptions.json");
 
+					return {
+						definitions,
+						oneOf: [{ $ref: "#/definitions/CleanOptions" }]
+					};
+				},
+				this.options,
+				{
+					name: "Clean Plugin",
+					baseDataPath: "options"
+				}
+			);
+		});
+
+		const { keep } = this.options;
+
+		/** @type {boolean} */
+		const dry = this.options.dry || false;
 		/** @type {KeepFn} */
 		const keepFn =
 			typeof keep === "function"
@@ -388,7 +408,7 @@
 		// We assume that no external modification happens while the compiler is active
 		// So we can store the old assets and only diff to them to avoid fs access on
 		// incremental builds
-		/** @type {undefined|Assets} */
+		/** @type {undefined | Assets} */
 		let oldAssets;
 
 		compiler.hooks.emit.tapAsync(
@@ -413,7 +433,8 @@
 				const currentAssets = new Map();
 				const now = Date.now();
 				for (const asset of Object.keys(compilation.assets)) {
-					if (/^[A-Za-z]:\\|^\/|^\\\\/.test(asset)) continue;
+					if (/^[a-z]:\\|^\/|^\\\\/i.test(asset)) continue;
+					/** @type {string} */
 					let normalizedAsset;
 					let newNormalizedAsset = asset.replace(/\\/g, "/");
 					do {
@@ -435,6 +456,7 @@
 				const outputPath = compilation.getPath(compiler.outputPath, {});
 
 				/**
+				 * Checks whether this clean plugin is kept.
 				 * @param {string} path path
 				 * @returns {boolean | undefined} true, if needs to be kept
 				 */
@@ -445,6 +467,7 @@
 				};
 
 				/**
+				 * Processes the provided err.
 				 * @param {(Error | null)=} err err
 				 * @param {Diff=} diff diff
 				 */

--
Gitblit v1.9.3