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