12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- "use strict";
- const t = require("@webassemblyjs/ast");
- const { decode } = require("@webassemblyjs/wasm-parser");
- const EnvironmentNotSupportAsyncWarning = require("../EnvironmentNotSupportAsyncWarning");
- const Parser = require("../Parser");
- const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
- const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
- const decoderOpts = {
- ignoreCodeSection: true,
- ignoreDataSection: true,
-
- ignoreCustomNameSection: true
- };
- class WebAssemblyParser extends Parser {
-
- constructor(options) {
- super();
- this.hooks = Object.freeze({});
- this.options = options;
- }
-
- parse(source, state) {
- if (!Buffer.isBuffer(source)) {
- throw new Error("WebAssemblyParser input must be a Buffer");
- }
-
- const buildInfo = (state.module.buildInfo);
- buildInfo.strict = true;
- const BuildMeta = (state.module.buildMeta);
- BuildMeta.exportsType = "namespace";
- BuildMeta.async = true;
- EnvironmentNotSupportAsyncWarning.check(
- state.module,
- state.compilation.runtimeTemplate,
- "asyncWebAssembly"
- );
-
- const program = decode(source, decoderOpts);
- const module = program.body[0];
-
- const exports = [];
- t.traverse(module, {
- ModuleExport({ node }) {
- exports.push(node.name);
- },
- ModuleImport({ node }) {
- const dep = new WebAssemblyImportDependency(
- node.module,
- node.name,
- node.descr,
- false
- );
- state.module.addDependency(dep);
- }
- });
- state.module.addDependency(new StaticExportsDependency(exports, false));
- return state;
- }
- }
- module.exports = WebAssemblyParser;
|