| | |
| | | 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 */ |
| | | /** @typedef {import("../Compiler")} Compiler */ |
| | | |
| | | /** |
| | | * Defines the read file compile async wasm plugin options type used by this module. |
| | | * @typedef {object} ReadFileCompileAsyncWasmPluginOptions |
| | | * @property {boolean=} import use import? |
| | | */ |
| | |
| | | |
| | | class ReadFileCompileAsyncWasmPlugin { |
| | | /** |
| | | * Creates an instance of ReadFileCompileAsyncWasmPlugin. |
| | | * @param {ReadFileCompileAsyncWasmPluginOptions=} options options object |
| | | */ |
| | | constructor({ import: useImport = false } = {}) { |
| | | /** @type {boolean} */ |
| | | this._import = useImport; |
| | | } |
| | | |
| | | /** |
| | | * Apply the plugin |
| | | * Applies the plugin by registering its hooks on the compiler. |
| | | * @param {Compiler} compiler the compiler instance |
| | | * @returns {void} |
| | | */ |
| | |
| | | compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => { |
| | | const globalWasmLoading = compilation.outputOptions.wasmLoading; |
| | | /** |
| | | * Checks whether this read file compile async wasm plugin is enabled for chunk. |
| | | * @param {Chunk} chunk chunk |
| | | * @returns {boolean} true, if wasm loading is enabled for the chunk |
| | | */ |
| | |
| | | }) |
| | | ); |
| | | }); |
| | | |
| | | 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({ |
| | | generateLoadBinaryCode, |
| | | supportsStreaming: false |
| | | }) |
| | | ); |
| | | }); |
| | | }); |
| | | } |
| | | } |