| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra	*/"use strict";const UnsupportedWebAssemblyFeatureError = require("./UnsupportedWebAssemblyFeatureError");class WasmFinalizeExportsPlugin {	apply(compiler) {		compiler.hooks.compilation.tap("WasmFinalizeExportsPlugin", compilation => {			compilation.hooks.finishModules.tap(				"WasmFinalizeExportsPlugin",				modules => {					for (const module of modules) {						// 1. if a WebAssembly module						if (module.type.startsWith("webassembly") === true) {							const jsIncompatibleExports =								module.buildMeta.jsIncompatibleExports;							if (jsIncompatibleExports === undefined) {								continue;							}							for (const reason of module.reasons) {								// 2. is referenced by a non-WebAssembly module								if (reason.module.type.startsWith("webassembly") === false) {									const ref = compilation.getDependencyReference(										reason.module,										reason.dependency									);									if (!ref) continue;									const importedNames = ref.importedNames;									if (Array.isArray(importedNames)) {										importedNames.forEach(name => {											// 3. and uses a func with an incompatible JS signature											if (												Object.prototype.hasOwnProperty.call(													jsIncompatibleExports,													name												)											) {												// 4. error												/** @type {any} */												const error = new UnsupportedWebAssemblyFeatureError(													`Export "${name}" with ${jsIncompatibleExports[name]} can only be used for direct wasm to wasm dependencies`												);												error.module = module;												error.origin = reason.module;												error.originLoc = reason.dependency.loc;												error.dependencies = [reason.dependency];												compilation.errors.push(error);											}										});									}								}							}						}					}				}			);		});	}}module.exports = WasmFinalizeExportsPlugin;
 |