UNPKG

react-monaco-editor

Version:
76 lines (65 loc) 2.16 kB
/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const WebAssemblyParser = require("./WebAssemblyParser"); const WebAssemblyGenerator = require("./WebAssemblyGenerator"); const WebAssemblyImportDependency = require("./dependencies/WebAssemblyImportDependency"); class WebAssemblyModulesPlugin { apply(compiler) { compiler.hooks.compilation.tap( "WebAssemblyModulesPlugin", (compilation, { normalModuleFactory }) => { compilation.dependencyFactories.set( WebAssemblyImportDependency, normalModuleFactory ); normalModuleFactory.hooks.createParser .for("webassembly/experimental") .tap("WebAssemblyModulesPlugin", () => { return new WebAssemblyParser(); }); normalModuleFactory.hooks.createGenerator .for("webassembly/experimental") .tap("WebAssemblyModulesPlugin", () => { return new WebAssemblyGenerator(); }); compilation.chunkTemplate.hooks.renderManifest.tap( "WebAssemblyModulesPlugin", (result, options) => { const chunk = options.chunk; const outputOptions = options.outputOptions; const moduleTemplates = options.moduleTemplates; const dependencyTemplates = options.dependencyTemplates; for (const module of chunk.modulesIterable) { if (module.type && module.type.startsWith("webassembly")) { const filenameTemplate = outputOptions.webassemblyModuleFilename; result.push({ render: () => this.renderWebAssembly( module, moduleTemplates.webassembly, dependencyTemplates ), filenameTemplate, pathOptions: { module }, identifier: `webassemblyModule${module.id}`, hash: module.hash }); } } return result; } ); } ); } renderWebAssembly(module, moduleTemplate, dependencyTemplates) { return moduleTemplate.render(module, dependencyTemplates, {}); } } module.exports = WebAssemblyModulesPlugin;