Sha256: 2b33418952f7669368678695493a38c2053c587b82a731fffd29e8a1e293297a

Contents?: true

Size: 1.99 KB

Versions: 26

Compression:

Stored size: 1.99 KB

Contents

/*
	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;

Version data entries

26 entries across 25 versions & 8 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
disco_app-0.18.0 test/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
disco_app-0.18.2 test/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
disco_app-0.16.1 test/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
disco_app-0.15.2 test/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
disco_app-0.18.4 test/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
disco_app-0.18.1 test/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
disco_app-0.14.0 test/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
tang-0.2.1 spec/tang_app/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
tang-0.2.0 spec/tang_app/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
tang-0.1.0 spec/tang_app/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
tang-0.0.9 spec/tang_app/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
enju_library-0.3.8 spec/dummy/node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js
jester-data-8.0.0 node_modules/webpack/lib/wasm/WasmFinalizeExportsPlugin.js