Skip to content

Commit 9cb9006

Browse files
committedMay 15, 2020
--prepend-code option
1 parent cddb586 commit 9cb9006

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed
 

‎_run.js

+3
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ if (tasks.length > 1) // If batch mode
111111
else
112112
console.log(`Analyzing ${tasks.length} items with ${q.concurrency} threads (use --threads to change this value)`)
113113

114+
// queue the input files for analysis
114115
const outputDir = argv["output-dir"] || "./";
115116
tasks.forEach(({filepath, filename}) => q.push(cb => analyze(filepath, filename, cb)));
116117

@@ -125,7 +126,9 @@ q.on("success", () => {
125126
q.start();
126127

127128
function analyze(filepath, filename, cb) {
129+
128130
let directory = path.join(outputDir, filename + ".results");
131+
129132
// Find a suitable directory name
130133
for (let i = 1; fs.existsSync(directory); i++)
131134
directory = path.join(outputDir, filename + "." + i + ".results");

‎analyze.js

+29
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,35 @@ cc decoder.c -o decoder
307307
}
308308

309309
code = rewrite(code);
310+
311+
// prepend extra JS containing mock objects in the given file(s) onto the code
312+
if (argv["prepended-code"]) {
313+
314+
var prependedCode = ""
315+
var files = []
316+
317+
// get all the files in the directory and sort them alphebetically
318+
if (fs.lstatSync(argv["prepended-code"]).isDirectory()) {
319+
320+
dir_files = fs.readdirSync(argv["prepended-code"]);
321+
for (var i = 0; i < dir_files.length; i++) {
322+
files.push(path.join(argv["prepended-code"], dir_files[i]))
323+
}
324+
325+
// make sure we're adding mock code in the right order
326+
files.sort()
327+
}
328+
else {
329+
files.push(argv["prepended-code"])
330+
}
331+
332+
for (var i = 0; i < files.length; i++) {
333+
prependedCode += fs.readFileSync(files[i], 'utf-8') + "\n\n"
334+
}
335+
336+
code = prependedCode + "\n\n" + code
337+
}
338+
310339
lib.logJS(code);
311340
code = fs.readFileSync(path.join(__dirname, "patch.js"), "utf8") + code;
312341

‎argv.js

-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ if (argv._unknown != null && argv._unknown.some(isFlag)) {
4141

4242
module.exports = {
4343
flags,
44-
4544
run: getArgs(flags.run),
4645
export: getArgs(flags.export),
4746
};

‎flags.json

+5
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@
6262
"type": "Boolean",
6363
"description": "More aggressive preprocessing. Often results in better code, but can break on some edge cases (eg. redefining prototypes)"
6464
},
65+
{
66+
"name": "prepended-code",
67+
"type": "String",
68+
"description": "Input file or directory containing code that should be prepended to the JS file(s) we're analyzing. If directory is given, prepends contents of all files in the directory in "
69+
},
6570
{
6671
"name": "no-kill",
6772
"type": "Boolean",

0 commit comments

Comments
 (0)
Please sign in to comment.