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/wasm-async/UniversalCompileAsyncWasmPlugin.js |   41 ++++++++++++++++++++++++++++++++++++++---
 1 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/node_modules/webpack/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js b/node_modules/webpack/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js
index 043888c..361c868 100644
--- a/node_modules/webpack/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js
+++ b/node_modules/webpack/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js
@@ -8,6 +8,7 @@
 const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
 const RuntimeGlobals = require("../RuntimeGlobals");
 const Template = require("../Template");
+const AsyncWasmCompileRuntimeModule = require("../wasm-async/AsyncWasmCompileRuntimeModule");
 const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
 
 /** @typedef {import("../Chunk")} Chunk */
@@ -15,9 +16,14 @@
 
 const PLUGIN_NAME = "UniversalCompileAsyncWasmPlugin";
 
+/**
+ * Enables async WebAssembly loading that works in both browser-like and Node.js
+ * environments by selecting the appropriate binary-loading strategy at runtime.
+ */
 class UniversalCompileAsyncWasmPlugin {
 	/**
-	 * Apply the plugin
+	 * Registers compilation hooks that attach the universal async wasm runtime
+	 * to chunks using `wasmLoading: "universal"`.
 	 * @param {Compiler} compiler the compiler instance
 	 * @returns {void}
 	 */
@@ -25,6 +31,8 @@
 		compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
 			const globalWasmLoading = compilation.outputOptions.wasmLoading;
 			/**
+			 * Determines whether the chunk should use the universal async wasm
+			 * loading backend.
 			 * @param {Chunk} chunk chunk
 			 * @returns {boolean} true, if wasm loading is enabled for the chunk
 			 */
@@ -36,13 +44,15 @@
 						: globalWasmLoading;
 				return wasmLoading === "universal";
 			};
-			const generateBeforeInstantiateStreaming = () =>
+			const generateBeforeStreaming = () =>
 				Template.asString([
 					"if (!useFetch) {",
 					Template.indent(["return fallback();"]),
 					"}"
 				]);
 			/**
+			 * Generates setup code that decides whether the current environment can
+			 * use `fetch` and captures the wasm module URL.
 			 * @param {string} path path
 			 * @returns {string} code
 			 */
@@ -52,6 +62,8 @@
 					`var wasmUrl = ${path};`
 				]);
 			/**
+			 * Generates the runtime expression that fetches the binary in browsers
+			 * or reads it from the filesystem in Node.js.
 			 * @type {(path: string) => string}
 			 */
 			const generateLoadBinaryCode = () =>
@@ -95,7 +107,30 @@
 						new AsyncWasmLoadingRuntimeModule({
 							generateBeforeLoadBinaryCode,
 							generateLoadBinaryCode,
-							generateBeforeInstantiateStreaming,
+							generateBeforeInstantiateStreaming: generateBeforeStreaming,
+							supportsStreaming: true
+						})
+					);
+				});
+
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.compileWasm)
+				.tap(PLUGIN_NAME, (chunk, set, { chunkGraph }) => {
+					if (!isEnabledForChunk(chunk)) return;
+					if (
+						!chunkGraph.hasModuleInGraph(
+							chunk,
+							(m) => m.type === WEBASSEMBLY_MODULE_TYPE_ASYNC
+						)
+					) {
+						return;
+					}
+					compilation.addRuntimeModule(
+						chunk,
+						new AsyncWasmCompileRuntimeModule({
+							generateBeforeLoadBinaryCode,
+							generateLoadBinaryCode,
+							generateBeforeCompileStreaming: generateBeforeStreaming,
 							supportsStreaming: true
 						})
 					);

--
Gitblit v1.9.3