WXL
3 天以前 9bce51f651aad297ef9eb6df832bfdaf1de05d84
node_modules/webpack/lib/web/FetchCompileAsyncWasmPlugin.js
@@ -7,6 +7,7 @@
const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
const RuntimeGlobals = require("../RuntimeGlobals");
const AsyncWasmCompileRuntimeModule = require("../wasm-async/AsyncWasmCompileRuntimeModule");
const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
/** @typedef {import("../Chunk")} Chunk */
@@ -14,9 +15,14 @@
const PLUGIN_NAME = "FetchCompileAsyncWasmPlugin";
/**
 * Enables asynchronous WebAssembly loading through `fetch` for environments
 * that can instantiate fetched binaries at runtime.
 */
class FetchCompileAsyncWasmPlugin {
   /**
    * Apply the plugin
    * Registers compilation hooks that attach the async fetch-based wasm runtime
    * to chunks containing async WebAssembly modules.
    * @param {Compiler} compiler the compiler instance
    * @returns {void}
    */
@@ -24,6 +30,8 @@
      compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
         const globalWasmLoading = compilation.outputOptions.wasmLoading;
         /**
          * Determines whether the chunk should load async WebAssembly binaries
          * through the `fetch` backend.
          * @param {Chunk} chunk chunk
          * @returns {boolean} true, if wasm loading is enabled for the chunk
          */
@@ -36,6 +44,8 @@
            return wasmLoading === "fetch";
         };
         /**
          * Generates the runtime expression that downloads the emitted wasm
          * binary for an async WebAssembly module.
          * @param {string} path path to the wasm file
          * @returns {string} code to load the wasm file
          */
@@ -63,6 +73,28 @@
                  })
               );
            });
         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;
               }
               set.add(RuntimeGlobals.publicPath);
               compilation.addRuntimeModule(
                  chunk,
                  new AsyncWasmCompileRuntimeModule({
                     generateLoadBinaryCode,
                     supportsStreaming: true
                  })
               );
            });
      });
   }
}