| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const RuntimeGlobals = require("../RuntimeGlobals");const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");/** @typedef {import("../Compiler")} Compiler */class FetchCompileAsyncWasmPlugin {	/**	 * Apply the plugin	 * @param {Compiler} compiler the compiler instance	 * @returns {void}	 */	apply(compiler) {		compiler.hooks.thisCompilation.tap(			"FetchCompileAsyncWasmPlugin",			compilation => {				const globalWasmLoading = compilation.outputOptions.wasmLoading;				const isEnabledForChunk = chunk => {					const options = chunk.getEntryOptions();					const wasmLoading =						options && options.wasmLoading !== undefined							? options.wasmLoading							: globalWasmLoading;					return wasmLoading === "fetch";				};				const generateLoadBinaryCode = path =>					`fetch(${RuntimeGlobals.publicPath} + ${path})`;				compilation.hooks.runtimeRequirementInTree					.for(RuntimeGlobals.instantiateWasm)					.tap("FetchCompileAsyncWasmPlugin", (chunk, set) => {						if (!isEnabledForChunk(chunk)) return;						const chunkGraph = compilation.chunkGraph;						if (							!chunkGraph.hasModuleInGraph(								chunk,								m => m.type === "webassembly/async"							)						) {							return;						}						set.add(RuntimeGlobals.publicPath);						compilation.addRuntimeModule(							chunk,							new AsyncWasmLoadingRuntimeModule({								generateLoadBinaryCode,								supportsStreaming: true							})						);					});			}		);	}}module.exports = FetchCompileAsyncWasmPlugin;
 |