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/DefinePlugin.js |   87 ++++++++++++++++++++++++++++++++++---------
 1 files changed, 69 insertions(+), 18 deletions(-)

diff --git a/node_modules/webpack/lib/DefinePlugin.js b/node_modules/webpack/lib/DefinePlugin.js
index b2d58e1..7b480ae 100644
--- a/node_modules/webpack/lib/DefinePlugin.js
+++ b/node_modules/webpack/lib/DefinePlugin.js
@@ -5,6 +5,7 @@
 
 "use strict";
 
+const { SyncWaterfallHook } = require("tapable");
 const {
 	JAVASCRIPT_MODULE_TYPE_AUTO,
 	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
@@ -32,33 +33,38 @@
 /** @typedef {import("./javascript/JavascriptParser").DestructuringAssignmentProperties} DestructuringAssignmentProperties */
 /** @typedef {import("./javascript/JavascriptParser").Range} Range */
 /** @typedef {import("./logging/Logger").Logger} Logger */
+/** @typedef {import("./Compilation")} Compilation */
 
 /** @typedef {null | undefined | RegExp | EXPECTED_FUNCTION | string | number | boolean | bigint | undefined} CodeValuePrimitive */
 /** @typedef {RecursiveArrayOrRecord<CodeValuePrimitive | RuntimeValue>} CodeValue */
 
 /**
+ * Defines the runtime value options type used by this module.
  * @typedef {object} RuntimeValueOptions
  * @property {string[]=} fileDependencies
  * @property {string[]=} contextDependencies
  * @property {string[]=} missingDependencies
  * @property {string[]=} buildDependencies
- * @property {string| (() => string)=} version
+ * @property {string | (() => string)=} version
  */
 
 /** @typedef {(value: { module: NormalModule, key: string, readonly version: ValueCacheVersion }) => CodeValuePrimitive} GeneratorFn */
 
 class RuntimeValue {
 	/**
+	 * Creates an instance of RuntimeValue.
 	 * @param {GeneratorFn} fn generator function
 	 * @param {true | string[] | RuntimeValueOptions=} options options
 	 */
 	constructor(fn, options) {
+		/** @type {GeneratorFn} */
 		this.fn = fn;
 		if (Array.isArray(options)) {
 			options = {
 				fileDependencies: options
 			};
 		}
+		/** @type {true | RuntimeValueOptions} */
 		this.options = options || {};
 	}
 
@@ -67,6 +73,7 @@
 	}
 
 	/**
+	 * Returns code.
 	 * @param {JavascriptParser} parser the parser
 	 * @param {ValueCacheVersions} valueCacheVersions valueCacheVersions
 	 * @param {string} key the defined key
@@ -124,6 +131,7 @@
 }
 
 /**
+ * Returns used keys.
  * @param {DestructuringAssignmentProperties | undefined} properties properties
  * @returns {Set<string> | undefined} used keys
  */
@@ -136,7 +144,8 @@
 /** @typedef {boolean | undefined | null} AsiSafe */
 
 /**
- * @param {EXPECTED_ANY[] | {[k: string]: EXPECTED_ANY}} obj obj
+ * Returns code converted to string that evaluates.
+ * @param {EXPECTED_ANY[] | { [k: string]: EXPECTED_ANY }} obj obj
  * @param {JavascriptParser} parser Parser
  * @param {ValueCacheVersions} valueCacheVersions valueCacheVersions
  * @param {string} key the defined key
@@ -156,6 +165,7 @@
 	asiSafe,
 	objKeys
 ) => {
+	/** @type {string} */
 	let code;
 	const arr = Array.isArray(obj);
 	if (arr) {
@@ -180,7 +190,7 @@
 		code = `{${keys
 			.map((key) => {
 				const code = obj[key];
-				return `${JSON.stringify(key)}:${toCode(
+				return `${key === "__proto__" ? '["__proto__"]' : JSON.stringify(key)}:${toCode(
 					code,
 					parser,
 					valueCacheVersions,
@@ -282,6 +292,7 @@
 };
 
 /**
+ * Returns result.
  * @param {CodeValue} code code
  * @returns {string | undefined} result
  */
@@ -330,16 +341,45 @@
 );
 const WEBPACK_REQUIRE_IDENTIFIER_REGEXP = new RegExp(RuntimeGlobals.require);
 
+/**
+ * Defines the define plugin hooks type used by this module.
+ * @typedef {object} DefinePluginHooks
+ * @property {SyncWaterfallHook<[Record<string, CodeValue>]>} definitions
+ */
+
+/** @typedef {Record<string, CodeValue>} Definitions */
+
+/** @type {WeakMap<Compilation, DefinePluginHooks>} */
+const compilationHooksMap = new WeakMap();
+
 class DefinePlugin {
 	/**
+	 * Returns the attached hooks.
+	 * @param {Compilation} compilation the compilation
+	 * @returns {DefinePluginHooks} the attached hooks
+	 */
+	static getCompilationHooks(compilation) {
+		let hooks = compilationHooksMap.get(compilation);
+		if (hooks === undefined) {
+			hooks = {
+				definitions: new SyncWaterfallHook(["definitions"])
+			};
+			compilationHooksMap.set(compilation, hooks);
+		}
+		return hooks;
+	}
+
+	/**
 	 * Create a new define plugin
-	 * @param {Record<string, CodeValue>} definitions A map of global object definitions
+	 * @param {Definitions} definitions A map of global object definitions
 	 */
 	constructor(definitions) {
+		/** @type {Definitions} */
 		this.definitions = definitions;
 	}
 
 	/**
+	 * Returns runtime value.
 	 * @param {GeneratorFn} fn generator function
 	 * @param {true | string[] | RuntimeValueOptions=} options options
 	 * @returns {RuntimeValue} runtime value
@@ -349,7 +389,7 @@
 	}
 
 	/**
-	 * Apply the plugin
+	 * Applies the plugin by registering its hooks on the compiler.
 	 * @param {Compiler} compiler the compiler instance
 	 * @returns {void}
 	 */
@@ -358,6 +398,12 @@
 			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
 				const definitions = this.definitions;
+				const hooks = DefinePlugin.getCompilationHooks(compilation);
+
+				hooks.definitions.tap(PLUGIN_NAME, (previousDefinitions) => ({
+					...previousDefinitions,
+					...definitions
+				}));
 
 				/**
 				 * @type {Map<string, Set<string>>}
@@ -382,11 +428,12 @@
 				);
 
 				/**
-				 * Handler
+				 * Handles the hook callback for this code path.
 				 * @param {JavascriptParser} parser Parser
 				 * @returns {void}
 				 */
 				const handler = (parser) => {
+					/** @type {Set<string>} */
 					const hooked = new Set();
 					const mainValue =
 						/** @type {ValueCacheVersion} */
@@ -402,6 +449,7 @@
 					});
 
 					/**
+					 * Adds value dependency.
 					 * @param {string} key key
 					 */
 					const addValueDependency = (key) => {
@@ -417,6 +465,7 @@
 					};
 
 					/**
+					 * With value dependency.
 					 * @template T
 					 * @param {string} key key
 					 * @param {(expression: Expression) => T} fn fn
@@ -430,8 +479,8 @@
 						};
 
 					/**
-					 * Walk definitions
-					 * @param {Record<string, CodeValue>} definitions Definitions map
+					 * Processes the provided definition.
+					 * @param {Definitions} definitions Definitions map
 					 * @param {string} prefix Prefix string
 					 * @returns {void}
 					 */
@@ -445,7 +494,7 @@
 								!(code instanceof RegExp)
 							) {
 								walkDefinitions(
-									/** @type {Record<string, CodeValue>} */ (code),
+									/** @type {Definitions} */ (code),
 									`${prefix + key}.`
 								);
 								applyObjectDefine(prefix + key, code);
@@ -457,7 +506,7 @@
 					};
 
 					/**
-					 * Apply define key
+					 * Processes the provided prefix.
 					 * @param {string} prefix Prefix
 					 * @param {string} key Key
 					 * @returns {void}
@@ -504,8 +553,8 @@
 											if (destructed === undefined) {
 												return;
 											}
-											/** @type {Record<string, CodeValue>} */
-											const obj = {};
+											/** @type {Definitions} */
+											const obj = Object.create(null);
 											const finalSet = finalByNestedKey.get(nested);
 											for (const { id } of destructed) {
 												const fullKey = `${nested}.${id}`;
@@ -542,7 +591,7 @@
 					};
 
 					/**
-					 * Apply Code
+					 * Processes the provided key.
 					 * @param {string} key Key
 					 * @param {CodeValue} code Code
 					 * @returns {void}
@@ -665,7 +714,7 @@
 					};
 
 					/**
-					 * Apply Object
+					 * Processes the provided key.
 					 * @param {string} key Key
 					 * @param {object} obj Object
 					 * @returns {void}
@@ -750,8 +799,8 @@
 					.tap(PLUGIN_NAME, handler);
 
 				/**
-				 * Walk definitions
-				 * @param {Record<string, CodeValue>} definitions Definitions map
+				 * Processes the provided definition.
+				 * @param {Definitions} definitions Definitions map
 				 * @param {string} prefix Prefix string
 				 * @returns {void}
 				 */
@@ -779,7 +828,7 @@
 							!(code instanceof RegExp)
 						) {
 							walkDefinitionsForValues(
-								/** @type {Record<string, CodeValue>} */ (code),
+								/** @type {Definitions} */ (code),
 								`${prefix + key}.`
 							);
 						}
@@ -787,11 +836,13 @@
 				};
 
 				/**
-				 * @param {Record<string, CodeValue>} definitions Definitions map
+				 * Walk definitions for keys.
+				 * @param {Definitions} definitions Definitions map
 				 * @returns {void}
 				 */
 				const walkDefinitionsForKeys = (definitions) => {
 					/**
+					 * Adds the provided map to the define plugin.
 					 * @param {Map<string, Set<string>>} map Map
 					 * @param {string} key key
 					 * @param {string} value v

--
Gitblit v1.9.3