2020-02-24 16:48:25 -08:00

49 lines
1.2 KiB
JavaScript

var jsdom = require("jsdom").jsdom;
var fs = require("fs");
var path = require("path");
function generateCode(name, htmlFile, rootNode, html) {
var generator = require("./codegen-" + name);
var code = generator(rootNode, html);
var wrappedCode = `window.createBenchmarks[${JSON.stringify(
htmlFile + "-" + name
)}]=function() {\n${code}\n}`;
var generateInitCode = generator.generateInitCode;
if (generateInitCode) {
wrappedCode = `
(function() {
${generateInitCode(rootNode, html)}
${wrappedCode}
}())`;
}
fs.writeFileSync(
path.join(__dirname, `benchmark-${htmlFile}-${name}.js`),
wrappedCode,
{ encoding: "utf8" }
);
}
var methods = ["dom", "dom-innerHTML", "marko-vdom", "react"];
var htmlFiles = fs.readdirSync(__dirname).filter(function(name) {
return name.startsWith("html-");
});
htmlFiles.forEach(function(htmlFile) {
var name = htmlFile.substring("html-".length).slice(0, 0 - ".html".length);
var html = fs.readFileSync(path.join(__dirname, htmlFile), {
encoding: "utf8"
});
var doc = jsdom(html);
var rootNode = doc.body.firstChild;
methods.forEach(function(methodName) {
generateCode(methodName, name, rootNode, html);
});
});