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