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