mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
| 	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;
 |