var _require = require("@webassemblyjs/ast"),
traverse = _require.traverse;
function printExport(moduleExport, funcsTable) {
if (moduleExport.descr.exportType === "Func") {
var funcNode = funcsTable[moduleExport.descr.id.value];
var params = funcNode.params.map(function (x) {
return x.valtype;
}).join(", ");
var results = funcNode.result.join(", ") || "void";
return "- " + moduleExport.name + "(" + params + "): " + results;
}
return "- Unknown (type " + moduleExport.descr.exportType + ")";
}
function printImport(moduleImport) {
if (moduleImport.descr.type === "FuncImportDescr") {
var params = moduleImport.descr.params.map(function (x) {
return x.valtype;
}).join(", ");
var results = moduleImport.descr.results.join(", ") || "void";
return "- " + moduleImport.module + "." + moduleImport.name + "(" + params + "): " + results;
}
return "- Unknown (type " + moduleImport.descr.type + ")";
}
function print(ast) {
var out = "";
var state = {
moduleExports: [],
moduleImports: [],
funcsTable: {}
};
traverse(ast, {
Func: function Func(_ref) {
var node = _ref.node;
state.funcsTable[node.name.value] = node;
},
ModuleExport: function ModuleExport(_ref2) {
var node = _ref2.node;
state.moduleExports.push(node);
},
ModuleImport: function ModuleImport(_ref3) {
var node = _ref3.node;
state.moduleImports.push(node);
}
});
out += "## Imports:";
if (state.moduleImports.length > 0) {
out += "\n";
out += state.moduleImports.reduce(function (acc, e) {
return acc + printImport(e) + "\n";
}, "");
} else {
out += " None";
}
out += "\n";
out += "## Exports:";
if (state.moduleExports.length > 0) {
out += "\n";
out += state.moduleExports.reduce(function (acc, e) {
return acc + printExport(e, state.funcsTable) + "\n";
}, "");
} else {
out += " None";
}
return out;
}
module.exports = print; |