UNPKG

@fromjs/backend

Version:
92 lines (91 loc) 3.84 kB
"use strict"; 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; }