@fromjs/backend
Version:
92 lines (91 loc) • 3.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const pMap = require("p-map");
const fs = require("fs");
const path = require("path");
const prettyBytes = require("pretty-bytes");
async function compileNodeApp({ directory, requestHandler, outdir, ignoreFilePattern, includeFilePattern, }) {
let files = getNodeFiles(directory, "");
await pMap(files, async (file, i) => {
let filePath = file.subdirectory + file.name;
const outFilePath = path.resolve(outdir, filePath);
if (includeFilePattern && !includeFilePattern.test(filePath)) {
return;
}
if (ignoreFilePattern && ignoreFilePattern.test(filePath)) {
return;
}
if (fs.existsSync(outFilePath) &&
(file.subdirectory !== "" || file.name !== "test.js") &&
!file.name.includes("driver.js") &&
!file.name.includes("runner.js") &&
!file.name.includes("connection.js") &&
!file.name.includes("cri.js") &&
!file.name.includes("page-functions.js") &&
!file.name.includes("default-config.js") &&
!(file.relativePath.includes("lighthouse-cli") &&
file.name === "index.js")
// !file.name.includes("compiler")
) {
// console.log("skipping", outFilePath);
return;
}
let fileContent = fs.readFileSync(path.resolve(directory, file.relativePath), "utf-8");
require("mkdirp").sync(path.resolve(outdir, file.subdirectory));
if (file.name.endsWith(".js") &&
!file.subdirectory.includes("locale-data") &&
!file.subdirectory.includes("jsdoc")) {
console.log("## " + file.relativePath, ` ${prettyBytes(fileContent.length)} | ${i}/${files.length}`);
try {
const r = (await requestHandler.instrumentForEval(fileContent, {
type: "node_",
name: file.relativePath.replace(/[^a-zA-Z0-9\-]/g, "_"),
nodePath: file.subdirectory + file.name,
}));
console.time("did compile");
fs.writeFileSync(outFilePath, `'use strict';// babel already adds use strict, but i'm prepending stuff so it won't count
;
var global = Function("return this")();
global.fromJSNodeSourcePath = "${directory}"
global.fromJSNodeOutPath = "${outdir}";
;global.self = global; global.fromJSIsNode = true;\n` +
r.instrumentedCode);
// console.log("write", outFilePath);
}
catch (err) {
console.log("Comopile code failed, will write normal", file.relativePath, err.message);
fs.writeFileSync(outFilePath, fileContent);
}
}
else {
fs.writeFileSync(outFilePath, fileContent);
}
}, { concurrency: 4 });
// let helperFunctions = fs.readFileSync(
// "./packages/core/helperFunctions.js",
// "utf-8"
// );
}
exports.compileNodeApp = compileNodeApp;
function getNodeFiles(baseDirectory, subdirectory) {
let resolvedDir = path.resolve(baseDirectory + "/" + subdirectory);
let nodeFiles = [];
const files = fs.readdirSync(resolvedDir);
for (const file of files) {
let filePath = path.resolve(resolvedDir, file);
if (fs.lstatSync(filePath).isDirectory()) {
nodeFiles = [
...nodeFiles,
...getNodeFiles(baseDirectory, subdirectory + file + "/"),
];
}
else {
nodeFiles.push({
relativePath: subdirectory + file,
subdirectory,
name: file,
});
}
}
return nodeFiles;
}