You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1008 B
JavaScript

"use strict";
const astformer = require("astformer");
const parse = require("./parse");
const printAST = require("./print-ast");
const transformers = require("./transformers");
const generate = require("@babel/generator").default;
module.exports = function transpile(nixSource) {
if (process.env.DEBUG_NIX) {
console.log("-- DEBUG (SOURCE):\n", nixSource);
}
let ast = parse(nixSource);
if (process.env.DEBUG_NIX) {
console.log("-- DEBUG (AST):");
printAST(ast);
}
// Warm-up for hot VM performance testing
// for (let i = 0; i < 10000; i++) {
// astformer(ast, transformers);
// }
let result = astformer(ast, transformers);
if (process.env.DEBUG_NIX) {
console.log("-- DEBUG (TRANSPILED AST):");
printAST(result.ast);
console.log({ timings: result.timings });
}
let code = generate(result.ast).code;
if (process.env.DEBUG_NIX) {
console.log("-- DEBUG (INPUT):");
console.log(nixSource);
console.log("-- DEBUG (OUTPUT):");
console.log(code);
}
return code;
};