Commit a6e13c59 authored by Alexandra Rogova's avatar Alexandra Rogova

major restructure part 2

parent 2e1d402d

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

{
"env": {
"amd" : true,
"node": true,
"es6": true
},
"extends": "eslint:recommended",
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
},
"rules": {
"indent": [
"error",
4
],
"linebreak-style": [
"error",
"windows"
],
"quotes": [
"error",
"double"
],
"semi": [
"error",
"always"
]
}
}
\ No newline at end of file
{
"node" : true,
"maxlen" : 80,
"indent" : 2,
"maxerr" : 3,
"terse" : true,
"for" : true
}
\ No newline at end of file
const fs = require('fs');
var ipc=require('node-ipc');
const args = require("yargs")
.usage("Usage : Milestone1/all.js -only test -file only on this file -verbose")
.alias("f", "file")
.alias("o", "only")
.alias("v", "verbose")
.describe("file", "If you want to run the test on only one file (as opposed to all files in the directory), add this option and specify file location")
.describe("only", "If you only want to run one test, add this option and specify the test file name (eg : rss_bench)")
.describe("verbose", "Print results to console, if not specified results will only be copied to result file")
.nargs("file", 1)
.nargs("only", 1)
.nargs("verbose", 0)
.argv;
var current;
var to_run = [];
var options = [];
var only_script = args.only == null ? "" : args.only;
if(args.file !== undefined){
options.push("f");
options.push(args.file);
}
if (args.v !== undefined){
options.push("v");
}
ipc.config.id = 'main';
ipc.config.silent = true;
ipc.serve(
function(){
ipc.server.on('message', function(data,socket){
if (args.v) console.log(data);
if (data == "DONE") run(to_run, function (err) {if (err) throw err;});
});
ipc.server.on('socket.disconnected', function(socket, destroyedSocketID) {
ipc.log('client ' + destroyedSocketID + ' has disconnected!');
});
}
);
ipc.server.start();
function run (to_run_array, callback){
var childProcess = require('child_process');
if (to_run_array.length === 0){
return;
}
var invoked = false,
current = to_run_array.shift();
console.log("Starting" + current);
process = childProcess.fork(current, options);
process.on('message', function (mes){});
process.on('error', function (err) {
if (invoked) return;
invoked = true;
callback(err);
});
process.on('exit', function (code) {
if (invoked) return;
invoked = true;
var err = code === 0 ? null : new Error('exit code ' + code);
callback(err);
});
};
fs.readdir("./bench_files/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
if (!file.includes("run_scripts_sync") && file.includes(only_script)) {
to_run.push("./bench_files/"+file);
}
});
run(to_run, function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/add_csv_attachments.csv", {flags:'a'});
fs.truncateSync("./results/add_csv_attachments.csv");
stream.write("items,ramUsed,memUsed\n");
var to_run = [];
fs.readdir("./files/CSV/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
to_run.push({scriptPath : './unit_tests/add_csv.js', args : ['-f' ,"./files/CSV/"+file, "-s", "attachment"]});
});
to_run.sort(function(file1, file2){
var nb_items_file1 = parseInt(file1.args[1].slice(file1.args[1].indexOf("_")+1, file1.args[1].lastIndexOf(".")));
var nb_items_file2 = parseInt(file2.args[1].slice(file2.args[1].indexOf("_")+1, file2.args[1].lastIndexOf(".")));
return nb_items_file1 - nb_items_file2;
});
run(to_run, "./results/add_csv_attachments.csv", function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("../results/add_csv_metadata.csv", {flags:'a'});
fs.truncateSync("../results/add_csv_metadata.csv");
stream.write("items,ramUsed,memUsed\n");
var to_run = [];
fs.readdir("../files/CSV/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
to_run.push({scriptPath : '../unit_tests/add_csv.js', args : ['-f' ,"../files/CSV/"+file, "-s", "metadata"], amount : parseInt(file.substring(17, file.length-4))});
});
to_run.sort(function(file1, file2){
var nb_items_file1 = parseInt(file1.args[1].slice(file1.args[1].indexOf("_")+1, file1.args[1].lastIndexOf(".")));
var nb_items_file2 = parseInt(file2.args[1].slice(file2.args[1].indexOf("_")+1, file2.args[1].lastIndexOf(".")));
return nb_items_file1 - nb_items_file2;
});
run(to_run, "../results/add_csv_metadata.csv", function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("../results/add_random_csv_attachment.csv", {flags:'a'});
fs.truncateSync("../results/add_random_csv_attachment.csv");
stream.write("items,ramUsed,memUsed\n");
var to_run = [{scriptPath : '../unit_tests/add_random_csv.js', args : ["-p", 1000000, "-s", "attachment"], amount : 1000000}];
run(to_run, "../results/add_random_csv_attachment.csv", function (err) {if (err) throw err;});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("../results/add_random_csv_metadata.csv", {flags:'a'});
fs.truncateSync("../results/add_random_csv_metadata.csv");
stream.write("items,ramUsed,memUsed\n");
var to_run = [{scriptPath : '../unit_tests/add_random_csv.js', args : ["-p", 1000000, "-s", "metadata"], amount : 1000000}];
run(to_run, "../results/add_random_csv_metadata.csv", function (err) {if (err) throw err;});
/*jslint es6 */
"use strict"; "use strict";
var run = require('./run_scripts_sync').run;
const fs = require('fs'); var run = require("./run_scripts_sync").run;
const fs = require("fs");
var gen_random_content = require("../unit_tests/random_gen").gen_random_content; var gen_random_content = require("../unit_tests/random_gen").gen_random_content;
var args = JSON.parse(process.argv[2]); var args = JSON.parse(process.argv[2]);
var stream = fs.createWriteStream(args.result_file, {flags: 'w+'}); var stream = fs.createWriteStream(args.result_file, {flags: "w+"});
stream.write(args.titles + "\n"); stream.write(args.titles + "\n");
var to_run = []; var to_run = [];
...@@ -13,15 +13,15 @@ var to_run = []; ...@@ -13,15 +13,15 @@ var to_run = [];
if (args.files_dir) { if (args.files_dir) {
fs.readdir(args.files_dir, function (err, items) { fs.readdir(args.files_dir, function (err, items) {
if (err) { if (err) {
return console.log('Unable to scan directory: ' + err); return console.log("Unable to scan directory: " + err);
} }
items.forEach(function (file) { items.forEach(function (file) {
if (args.file === undefined || file.includes(args.file)) { if (args.file === undefined || file.includes(args.file)) {
var to_pass = [...args.to_pass]; var to_pass = [...args.to_pass];
to_pass.push("-f"); to_pass.push("-f");
to_pass.push(args.files_dir + file); to_pass.push(args.files_dir + file);
to_run.push({scriptPath: './unit_tests/' + args.script, to_run.push({scriptPath: "./unit_tests/" + args.script,
args: to_pass}); args: to_pass});
} }
}); });
console.log("Starting " + args.script); console.log("Starting " + args.script);
...@@ -36,8 +36,8 @@ if (args.files_dir) { ...@@ -36,8 +36,8 @@ if (args.files_dir) {
var to_pass = [...args.to_pass]; var to_pass = [...args.to_pass];
to_pass.push("-f"); to_pass.push("-f");
to_pass.push(random_file); to_pass.push(random_file);
to_run.push({scriptPath: './unit_tests/' + args.script, to_run.push({scriptPath: "./unit_tests/" + args.script,
args: to_pass}); args: to_pass});
run(to_run, args.result_file, function (err) { run(to_run, args.result_file, function (err) {
if (err) { if (err) {
throw err; throw err;
......
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/content_csv_size.csv", {flags:'a'});
fs.truncateSync("./results/content_csv_size.csv");
stream.write("items,uncompressed,compressed\n");
var to_run = [];
fs.readdir("./files/CSV/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
to_run.push({scriptPath : './unit_tests/download_content.js', args : ['-f' ,"./files/CSV/"+file], amount : parseInt(file.substring(17, file.length-4))});
});
run(to_run, "./results/content_csv_size.csv", function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
var to_run = [{scriptPath : './unit_tests/download_content_random.js', args : ["-p", 1000000], amount : 1000000}];
run(to_run, "./results/content_random_size.csv", function (err) {if (err) throw err;});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/index_csv_size.csv", {flags:'a'});
fs.truncateSync("./results/index_csv_size.csv");
stream.write("items,uncompressed,compressed\n");
var to_run = [];
fs.readdir("./files/CSV/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
to_run.push({scriptPath : './unit_tests/download_index.js', args : ['-f' ,"./files/CSV/"+file], amount : parseInt(file.substring(17, file.length-4))});
});
run(to_run, "./results/index_csv_size.csv", function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
var to_run = [{scriptPath : './unit_tests/download_index_random.js', args : ["-p", 1000000], amount : 1000000}];
run(to_run, "./results/index_random_size.csv", function (err) {if (err) throw err;});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/export_content.csv", {flags:'a'});
fs.truncateSync("./results/export_content.csv");
stream.write("items,zip,json\n");
var to_run = [];
fs.readdir("./files/CONTENT/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
if (file.includes("zip")) to_run.push({scriptPath : './unit_tests/export_content.js', args : ['-f' ,"./files/CONTENT/"+file], amount : parseInt(file.substring(25, file.length-4))});
});
run(to_run, "./results/export_content.csv", function (err) {if (err) throw err;});
});
const fs = require('fs');
var stream = fs.createWriteStream("./results/export_index.csv", {flags:'a'});
fs.truncateSync("./results/export_index.csv");
stream.write("items,zip,json\n");
var to_run = [];
fs.readdir("./files/INDEX/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
if (file.includes(".json")) to_run.push({scriptPath : './unit_tests/export_index.js', args : ['-f' ,"./files/INDEX/"+file], amount : parseInt(file.substring(21, file.length-5))});
});
run(to_run, "./results/export_index.csv", function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/import_content.csv", {flags:'a'});
fs.truncateSync("./results/import_content.csv");
stream.write("items,time\n");
var to_run = [];
fs.readdir("./files/CONTENT/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
if (file.includes("zip")) to_run.push({scriptPath : './unit_tests/import_content.js', args : ['-f' ,"./files/CONTENT/"+file], amount : parseInt(file.substring(25, file.length-4))});
});
run(to_run, "./results/import_content.csv", function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/import_content_bulk.csv", {flags:'a'});
fs.truncateSync("./results/import_content_bulk.csv");
stream.write("items,time\n");
var to_run = [];
fs.readdir("./files/CONTENT/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
if (file.includes(".zip")) to_run.push({scriptPath : './unit_tests/import_content.js', args : ['-f' ,"./files/CONTENT/"+file, '-b'], amount : parseInt(file.substring(17, file.length-4))});
});
run(to_run, "./results/import_content_bulk.csv", function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/import_content_uncompressed.csv", {flags:'a'});
fs.truncateSync("./results/import_content_uncompressed.csv");
stream.write("items,time\n");
var to_run = [];
fs.readdir("./files/CONTENT/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
if (file.includes(".json")) to_run.push({scriptPath : './unit_tests/import_content.js', args : ['-f' ,"./files/CONTENT/"+file, '-u'], amount : parseInt(file.substring(17, file.length-5))});
});
run(to_run, "./results/import_content_uncompressed.csv", function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/import_index.csv", {flags:'a'});
fs.truncateSync("./results/import_index.csv");
stream.write("items,time\n");
var to_run = [];
fs.readdir("./files/INDEX/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
if (file.includes(".zip")) to_run.push({scriptPath : './unit_tests/import_index.js', args : ['-f' ,"./files/INDEX/"+file], amount : parseInt(file.substring(21, file.length-4))});
});
run(to_run, "./results/import_index.csv", function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/import_index_uncompressed.csv", {flags:'a'});
fs.truncateSync("./results/import_index_uncompressed.csv");
stream.write("items,time\n");
var to_run = [];
fs.readdir("./files/INDEX/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
if (file.includes(".json")) to_run.push({scriptPath : './unit_tests/import_index.js', args : ['-f' ,"./files/INDEX/"+file, "-u"], amount : parseInt(file.substring(21, file.length-5))});
});
run(to_run, "./results/import_index_uncompressed.csv", function (err) {if (err) throw err;});
});
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/rss.csv", {flags:'a'});
fs.truncateSync("./results/rss.csv");
stream.write("items,time \n");
var to_run = [];
fs.readdir("./files/RSS/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
var args = process.argv.includes("v") ? ['-f' ,"./files/RSS/"+file, '-v'] : ['-f' ,"./files/RSS/"+file];
if (! process.argv.includes("f")) to_run.push({scriptPath : './unit_tests/add_rss.js', args : args});
else if (file.includes(process.argv[process.argv.indexOf("f")+1])) to_run.push({scriptPath : './unit_tests/add_rss.js', args : args});
});
run(to_run, "./results/rss.csv", function (err) {if (err) throw err;});
});
/*jslint es6 */
"use strict"; "use strict";
function get_size(file) {
return file.slice(file.indexOf("_") + 1, file.lastIndexOf("."));
}
module.exports = { module.exports = {
run: function (args, filepath, callback) { run: function (args, filepath, callback) {
var ipc = require('node-ipc'); var ipc = require("node-ipc");
ipc.config.silent = true; ipc.config.silent = true;
ipc.connectTo("main"); ipc.connectTo("main");
var childProcess = require('child_process'); var childProcess = require("child_process");
const fs = require('fs'); const fs = require("fs");
var stream = fs.createWriteStream(filepath, {flags: 'a'}); var stream = fs.createWriteStream(filepath, {flags: "a"});
function write(message) { function write(message) {
if (filepath === "") { if (filepath === "") {
...@@ -23,7 +18,7 @@ module.exports = { ...@@ -23,7 +18,7 @@ module.exports = {
} }
if (args.length === 0) { if (args.length === 0) {
ipc.of.main.emit('message', "DONE"); ipc.of.main.emit("message", "DONE");
return; return;
} }
...@@ -32,29 +27,20 @@ module.exports = { ...@@ -32,29 +27,20 @@ module.exports = {
console.log(to_run.args); console.log(to_run.args);
var process = childProcess.fork(to_run.scriptPath, to_run.args); var process = childProcess.fork(to_run.scriptPath, to_run.args);
process.on('message', function (mes) { process.on("message", function (mes) {
mes = mes.toString(); mes = mes.toString();
if (mes.includes("DONE")) { if (mes.includes("DONE")) {
module.exports.run(args, filepath, callback); module.exports.run(args, filepath, callback);
} else if (mes.includes("ERROR")) {
ipc.of.main.emit('message', mes);
if (to_run.args.includes("-f")) {
write(get_size(to_run.args[1]) + "," + mes);
} else {
write(mes);
}
module.exports.run(args, filepath, callback);
} else { } else {
ipc.of.main.emit('message', mes); ipc.of.main.emit("message", mes);
if (to_run.args.includes("-f")) { write(mes);
write(get_size(to_run.args[1]) + "," + mes); if (mes.includes("ERROR")) {
} else { module.exports.run(args, filepath, callback);
write(mes);
} }
} }
}); });
process.on('error', function (err) { process.on("error", function (err) {
if (invoked) { if (invoked) {
return; return;
} }
...@@ -62,14 +48,14 @@ module.exports = { ...@@ -62,14 +48,14 @@ module.exports = {
callback(err); callback(err);
}); });
process.on('exit', function (code) { process.on("exit", function (code) {
if (invoked) { if (invoked) {
return; return;
} }
invoked = true; invoked = true;
var err = code === 0 var err = code === 0
? null ? null
: new Error('exit code ' + code); : new Error("exit code " + code);
callback(err); callback(err);
}); });
} }
......
var run = require('./run_scripts_sync').run;
const fs = require('fs');
var stream = fs.createWriteStream("./results/sitemap.csv", {flags:'a'});
fs.truncateSync("./results/sitemap.csv");
stream.write("items,time\n");
var to_run = [];
fs.readdir("./files/SITEMAP/", function(err, items){
if (err) {
return console.log('Unable to scan directory: ' + err);
}
items.forEach(function (file) {
to_run.push({scriptPath : './unit_tests/add_sitemap.js', args : ['-f' ,"./files/SITEMAP/"+file], amount : parseInt(file.substring(25, file.length-4))});
});
run(to_run, "./results/sitemap.csv", function (err) {if (err) throw err;});
});
...@@ -35,12 +35,121 @@ ...@@ -35,12 +35,121 @@
"paragraphs" : 1000000, "paragraphs" : 1000000,
"to_pass" : ["-s", "metadata"] "to_pass" : ["-s", "metadata"]
}, },
{
"test_name" : "download content",
"script" : "download_content.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/download_content.html",
"result_file" : "./results/content_csv_size.csv",
"titles" : "items,time\n",
"files_dir" : "./files/CSV/",
"to_pass" : []
},
{
"test_name" : "download random content",
"script" : "download_content.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/download_content.html",
"result_file" : "./results/content_random_size.csv",
"titles" : "items,time\n",
"paragraphs" : 1000000,
"to_pass" : []
},
{
"test_name" : "download index",
"script" : "download_index.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/download_index.html",
"result_file" : "./results/index_csv_size.csv",
"titles" : "items,time\n",
"files_dir" : "./files/CSV/",
"to_pass" : []
},
{
"test_name" : "download random index",
"script" : "download_index.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/download_index.html",
"result_file" : "./results/index_random_size.csv",
"titles" : "items,time\n",
"paragraphs" : 1000000,
"to_pass" : []
},
{
"test_name" : "export content",
"script" : "export_content.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/export_content.html",
"result_file" : "./results/export_content.csv",
"titles" : "items,zip,json\n",
"files_dir" : "./files/CONTENT/",
"to_pass" : []
},
{
"test_name" : "export index",
"script" : "export_index.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/export_index.html",
"result_file" : "./results/export_index.csv",
"titles" : "items,zip,json\n",
"files_dir" : "./files/INDEX/",
"to_pass" : []
},
{
"test_name" : "import content",
"script" : "import_content.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/import_content.html",
"result_file" : "./results/import_content.csv",
"titles" : "items,time\n",
"files_dir" : "./files/CONTENT/",
"to_pass" : []
},
{
"test_name" : "import uncompressed content",
"script" : "import_content.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/import_content_uncompressed.html",
"result_file" : "./results/import_content_uncompressed.csv",
"titles" : "items,time\n",
"files_dir" : "./files/CONTENT/",
"to_pass" : ["-u"]
},
{
"test_name" : "import content in bulk",
"script" : "import_content.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/import_content_bulk.html",
"result_file" : "./results/import_content_bulk.csv",
"titles" : "items,time\n",
"files_dir" : "./files/CONTENT/",
"to_pass" : ["-b"]
},
{
"test_name" : "import index",
"script" : "import_index.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/import_index.html",
"result_file" : "./results/import_index.csv",
"titles" : "items,time\n",
"files_dir" : "./files/INDEX/",
"to_pass" : []
},
{
"test_name" : "import uncompressed index",
"script" : "import_index.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/import_index_uncompressed.html",
"result_file" : "./results/import_index_uncompressed.csv",
"titles" : "items,time\n",
"files_dir" : "./files/INDEX/",
"to_pass" : ["-u"]
},
{ {
"test_name" : "add rss", "test_name" : "add rss",
"script" : "add_rss.js", "script" : "add_rss.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/add_rss.html",
"result_file" : "./results/rss.csv", "result_file" : "./results/rss.csv",
"titles" : "items,time", "titles" : "items,time",
"files_dir" : "./files/RSS/", "files_dir" : "./files/RSS/",
"to_pass" : [] "to_pass" : []
},
{
"test_name" : "add sitemap",
"script" : "add_sitemap.js",
"link" : "https://softinst115787.host.vifib.net/public/unit_tests/add_sitemap.html",
"result_file" : "./results/sitemap.csv",
"titles" : "items,time",
"files_dir" : "./files/SITEMAP/",
"to_pass" : []
} }
] ]
\ No newline at end of file
items,ramUsed,diskUsed items,ramUsed,diskUsed
1000,-0.556598572009277,3.10546875
2000,-0.46393734146813537,5.2265625
3000,-0.5450302605122971,4.890625
/*jslint es6 */
"use strict"; "use strict";
const fs = require('fs');
var ipc = require('node-ipc'); const fs = require("fs");
var ipc = require("node-ipc");
const args = require("yargs") const args = require("yargs")
.usage("Usage : Milestone1/all.js -only test -file only on this file -v") .usage("Usage : Milestone1/all.js -only test -file only on this file -v")
.alias("f", "file") .alias("f", "file")
...@@ -30,11 +30,11 @@ if (args.file !== undefined) { ...@@ -30,11 +30,11 @@ if (args.file !== undefined) {
options.file = args.file; options.file = args.file;
} }
ipc.config.id = 'main'; ipc.config.id = "main";
ipc.config.silent = true; ipc.config.silent = true;
ipc.serve( ipc.serve(
function () { function () {
ipc.server.on('message', function (data) { ipc.server.on("message", function (data) {
if (args.v) { if (args.v) {
console.log(data); console.log(data);
} }
...@@ -51,7 +51,7 @@ ipc.serve( ...@@ -51,7 +51,7 @@ ipc.serve(
ipc.server.start(); ipc.server.start();
run = function (callback) { run = function (callback) {
var childProcess = require('child_process'); var childProcess = require("child_process");
if (to_run.length === 0) { if (to_run.length === 0) {
return; return;
...@@ -59,9 +59,9 @@ run = function (callback) { ...@@ -59,9 +59,9 @@ run = function (callback) {
var invoked = false; var invoked = false;
var process = childProcess.fork("./bench_files/bench.js", var process = childProcess.fork("./bench_files/bench.js",
[JSON.stringify(to_run.shift())]); [JSON.stringify(to_run.shift())]);
process.on('error', function (err) { process.on("error", function (err) {
if (invoked) { if (invoked) {
return; return;
} }
...@@ -69,21 +69,21 @@ run = function (callback) { ...@@ -69,21 +69,21 @@ run = function (callback) {
callback(err); callback(err);
}); });
process.on('exit', function (code) { process.on("exit", function (code) {
if (invoked) { if (invoked) {
return; return;
} }
invoked = true; invoked = true;
var err = code === 0 var err = code === 0
? null ? null
: new Error('exit code ' + code); : new Error("exit code " + code);
callback(err); callback(err);
}); });
}; };
fs.readFile("./config.json", 'utf8', function (err, data) { fs.readFile("./config.json", "utf8", function (err, data) {
if (err) { if (err) {
return console.log('Error while reading config file : ' + err); return console.log("Error while reading config file : " + err);
} }
var test_args = JSON.parse(data); var test_args = JSON.parse(data);
test_args.forEach(function (test) { test_args.forEach(function (test) {
......
/*jslint es6 */
"use strict"; "use strict";
var cut_file = require("./random_gen").cut_file; var cut_file = require("./random_gen").cut_file;
var diskspace = require('diskspace'); var diskspace = require("diskspace");
var os_utils = require('os-utils'); var os_utils = require("os-utils");
const fs = require('fs'); const puppeteer = require("puppeteer");
const puppeteer = require('puppeteer'); const Server = require("ws").Server;
const Server = require('ws').Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : load_content.js -saveAs metadata/attachment -file file_path") .usage("Usage : load_content.js -saveAs metadata/attachment -file file_path")
.demandOption(['file']) .demandOption(["file"])
.demandOption(['saveAs']) .demandOption(["saveAs"])
.alias("f", "file") .alias("f", "file")
.alias("s", "saveAs") .alias("s", "saveAs")
.alias("l", "link") .alias("l", "link")
.describe("file", "file containing content, data must follow the CSV standard") .describe("file", "file containing content, data must follow the CSV standard")
.describe("saveAs", "choose whether to save the content as " + .describe("saveAs", "choose whether to save the content as " +
"metadata or attachments in the indexeddb") "metadata or attachments in the indexeddb")
.describe("link", "link to website treating the data, defaults to Mynij") .describe("link", "link to website treating the data, defaults to Mynij")
.nargs("file", 1) .nargs("file", 1)
.nargs("saveAs", 1) .nargs("saveAs", 1)
.nargs("link", 1) .nargs("link", 1)
.argv; .argv;
if (!(args.saveAs === "metadata" ||args.saveAs === "attachment")){ if (!(args.saveAs === "metadata" ||args.saveAs === "attachment")){
throw 'Unrecognized save as argument'; throw "Unrecognized save as argument";
} }
var link = args.link var link = args.link
? args.link ? args.link
: "https://softinst115787.host.vifib.net/public/unit_tests/" + : "https://softinst115787.host.vifib.net/public/unit_tests/" +
"content_load.html?saveAs="; "content_load.html?saveAs=";
var saveAs = args.saveAs; var saveAs = args.saveAs;
var files; var files;
var stream;
var browser; var browser;
var page; var page;
var n = 0; var n = 0;
...@@ -43,10 +40,9 @@ var memBefore; ...@@ -43,10 +40,9 @@ var memBefore;
function init_server (){ function init_server (){
var port = 9030; var port = 9030;
var ws = new Server({port: port}); var ws = new Server({port: port});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(){
console.log(msg); diskspace.check("C", function (err, result){
diskspace.check('C', function (err, result){
var memUsed = (result.used/1024/1024) - memBefore; var memUsed = (result.used/1024/1024) - memBefore;
os_utils.cpuUsage(function(v){ os_utils.cpuUsage(function(v){
var ramUsed = v - ramBefore; var ramUsed = v - ramBefore;
...@@ -55,7 +51,7 @@ function init_server (){ ...@@ -55,7 +51,7 @@ function init_server (){
}); });
}); });
}); });
w.on('close', function() { w.on("close", function() {
ws.close(); ws.close();
}); });
}); });
...@@ -66,7 +62,7 @@ function timeout (){ ...@@ -66,7 +62,7 @@ function timeout (){
setTimeout(function () { setTimeout(function () {
if (Date.now() - time > 7200000){ //2 hours if (Date.now() - time > 7200000){ //2 hours
process.send(n + ",Timeout error \n"); process.send(n + ",Timeout error \n");
result = []; files = [];
query(); query();
} else { } else {
timeout(); timeout();
...@@ -76,34 +72,34 @@ function timeout (){ ...@@ -76,34 +72,34 @@ function timeout (){
async function query (){ async function query (){
if (files.length === 0){ if (files.length === 0){
var ipc=require('node-ipc'); var ipc=require("node-ipc");
ipc.config.silent = true; ipc.config.silent = true;
ipc.connectTo("main"); ipc.connectTo("main");
ipc.of.main.emit('message', "DONE"); ipc.of.main.emit("message", "DONE");
return; return;
} else { } else {
n += 1000; n += 1000;
time = Date.now(); time = Date.now();
const [fileChooser] = await Promise.all([ const [fileChooser] = await Promise.all([
page.waitForFileChooser(), page.waitForFileChooser(),
page.click('input#load') page.click("input#load")
]); ]);
await fileChooser.accept([files.shift()]); await fileChooser.accept([files.shift()]);
} }
} }
(async () => { (async () => {
files = cut_file(args.file); files = cut_file(args.file, 1000);
init_server(); init_server();
browser = await puppeteer.launch();
page = await browser.newPage();
await page.goto(link+saveAs);
os_utils.cpuUsage(function(v){ os_utils.cpuUsage(function(v){
ramBefore = v; ramBefore = v;
}); });
diskspace.check('C', function (err, result){ diskspace.check("C", function (err, result){
memBefore = result.used/1024/1024; memBefore = result.used/1024/1024;
}); });
browser = await puppeteer.launch();
page = await browser.newPage();
await page.goto(link+saveAs);
timeout(); timeout();
query(); query();
})(); })();
const puppeteer = require('puppeteer'); const puppeteer = require("puppeteer");
const Server = require('ws').Server; const Server = require("ws").Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : add_rss.js -file file_path") .usage("Usage : add_rss.js -file file_path")
.demandOption(['file']) .demandOption(["file"])
.alias("f", "file") .alias("f", "file")
.describe("file", "path to the RSS File") .describe("file", "path to the RSS File")
.nargs("file", 1) .nargs("file", 1)
.argv; .alias("l", "link")
.describe("link", "link to website treating the data, defaults to Mynij")
.nargs("link", 1)
.argv;
var browser, var link = args.link
index_start, ? args.link
index_total, : "https://softinst115787.host.vifib.net/public/unit_tests/add_rss.html";
db_start,
db_total; var browser;
var index_start;
var index_total;
var db_start;
var db_total;
function init_server (){ function init_server (){
var ws = new Server({port: 9030}); var ws = new Server({port: 9030});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(msg){
if (msg === "Index"){ if (msg === "Index"){
index_start = Date.now(); index_start = Date.now();
} else if (msg === "Database"){ } else if (msg === "Database"){
index_total = Date.now() - index_start; index_total = Date.now() - index_start;
db_start = Date.now(); db_start = Date.now();
} else if (msg.includes("Done")){ } else if (msg.includes("Done")){
db_total = Date.now() - db_start; db_total = Date.now() - db_start;
process.send((db_total+index_total)/1000); process.send((db_total+index_total)/1000);
process.send("DONE"); process.send("DONE");
ws.close(); ws.close();
browser.close(); browser.close();
} else { } else {
process.send(msg); process.send(msg);
ws.close(); ws.close();
browser.close(); browser.close();
} }
}); });
w.on('close', function() { w.on("close", function() {
ws.close(); ws.close();
});
}); });
});
} }
(async () => { (async () => {
init_server(); init_server();
browser = await puppeteer.launch(); browser = await puppeteer.launch();
var page = await browser.newPage(); var page = await browser.newPage();
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/add_rss.html'); await page.goto(link);
const [fileChooser] = await Promise.all([ const [fileChooser] = await Promise.all([
page.waitForFileChooser(), page.waitForFileChooser(),
page.click('input#load') page.click("input#load")
]); ]);
await fileChooser.accept([args.file]); await fileChooser.accept([args.file]);
})(); })();
const puppeteer = require('puppeteer'); const puppeteer = require("puppeteer");
const Server = require('ws').Server; const Server = require("ws").Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : add_sitemap.js -file file_path") .usage("Usage : add_sitemap.js -file file_path")
.demandOption(['file']) .demandOption(["file"])
.alias("f", "file") .alias("f", "file")
.describe("file", "path to the Sitemap XML File") .describe("file", "path to the Sitemap XML File")
.nargs("file", 1) .nargs("file", 1)
.argv; .alias("l", "link")
.describe("link", "link to website treating the data, defaults to Mynij")
.nargs("link", 1)
.argv;
var link = args.link
? args.link
: "https://softinst115787.host.vifib.net/public/unit_tests/add_sitemap.html";
var browser, var browser,
start; start;
function init_server (){ function init_server (){
var port = 9030; var port = 9030;
var ws = new Server({port: port}); var ws = new Server({port: port});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(msg){
if (msg.includes("Done")){ if (msg.includes("Done")){
var now = Date.now(); var now = Date.now();
process.send((now-start)/1000); process.send((now-start)/1000);
process.send("DONE"); process.send("DONE");
ws.close(); ws.close();
browser.close(); browser.close();
} else { } else {
console.log(msg); console.log(msg);
ws.close(); ws.close();
browser.close(); browser.close();
} }
}); });
w.on('close', function() { w.on("close", function() {
ws.close(); ws.close();
});
}); });
});
} }
(async () => { (async () => {
init_server(); init_server();
browser = await puppeteer.launch(); browser = await puppeteer.launch();
var page = await browser.newPage(); var page = await browser.newPage();
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/add_sitemap.html'); await page.goto(link);
start = Date.now(); start = Date.now();
const [fileChooser] = await Promise.all([ const [fileChooser] = await Promise.all([
page.waitForFileChooser(), page.waitForFileChooser(),
page.click('input#load') page.click("input#load")
]); ]);
await fileChooser.accept([args.file]); await fileChooser.accept([args.file]);
})(); })();
const puppeteer = require('puppeteer'); "use strict";
var cut_file = require("./random_gen").cut_file;
const puppeteer = require("puppeteer");
const Server = require("ws").Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : download_content.js -file file_path") .usage("Usage : download_content.js -file file_path")
.demandOption(['file']) .demandOption(["file"])
.alias("f", "file") .alias("f", "file")
.describe("file", "file containing content, data must follow the CSV standard") .alias("l", "link")
.nargs("file", 1) .describe("file", "file containing content, data must follow the CSV standard")
.argv; .describe("link", "link to website treating the data, defaults to Mynij")
.nargs("file", 1)
.nargs("link", 1)
.argv;
var link = args.link
? args.link
: "https://softinst115787.host.vifib.net/public/unit_tests/" +
"download_content.html";
var start;
var files;
var browser;
var n = 0;
var time;
var page;
function init_server (){ function init_server (){
var port = 9030; var port = 9030;
var ws = new Server({port: port}); var ws = new Server({port: port});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(msg){
if (msg === "Start"){ if (msg === "Start"){
start = Date.now(); start = Date.now();
} else if (msg === "Done"){ } else if (msg === "Done"){
var total = Date.now() - start; var total = Date.now() - start;
//console.log("Time spent : " + total/1000 + "s"); process.send(n + "," + total/1000 + "\n");
process.send(total/1000); query();
process.send("DONE"); } else {
// NEED TO SEND SIZE console.log("Error : " + msg);
} else { browser.close();
console.log("Error : " + msg); }
browser.close(); });
} w.on("close", function() {
}); ws.close();
w.on('close', function() { });
ws.close();
}); });
}); }
function timeout (){
setTimeout(function () {
if (Date.now() - time > 7200000){ //2 hours
process.send(n + ",Timeout error \n");
files = [];
query();
} else {
timeout();
}
}, 1800000); //30 minutes
}
async function query (){
if (files.length === 0){
var ipc=require("node-ipc");
ipc.config.silent = true;
ipc.connectTo("main");
ipc.of.main.emit("message", "DONE");
return;
} else {
n += 1000;
time = Date.now();
const [fileChooser] = await Promise.all([
page.waitForFileChooser(),
page.click("input#load")
]);
await fileChooser.accept([files.shift()]);
}
} }
(async () => { (async () => {
init_server(); files = cut_file(args.file, 1000);
var browser = await puppeteer.launch({headless: false}); init_server();
var page = await browser.newPage(); browser = await puppeteer.launch({headless: false});
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/download_content.html'); page = await browser.newPage();
const [fileChooser] = await Promise.all([ await page.goto(link);
page.waitForFileChooser(), timeout();
page.click('input#load') query();
]);
await fileChooser.accept([args.file]);
})(); })();
var gen_random_content = require('./random_gen').gen_random_content;
const puppeteer = require('puppeteer');
const Server = require('ws').Server;
const tmp = require('tmp');
const fs = require('fs');
var stream = fs.createWriteStream("../results/content_random_size.csv", {flags:'a'});
fs.truncateSync("../results/content_random_size.csv");
const args = require("yargs")
.usage("Usage : download_content_random.js -p number of random paragraphs to add to the index")
.demandOption(['paragraphs'])
.alias("p", "paragraphs")
.describe("paragraphs", "Number of random paragraphs to generate")
.nargs("p", 1)
.argv;
var start,
browser,
page,
result,
n=0,
time;
function init_server (){
var port = 9030;
var ws = new Server({port: port});
ws.on('connection', function(w){
w.on('message', function(msg){
if (msg.includes("Start")){
start = Date.now();
} else if (msg.includes("Done")){
var time_spent = Date.now() - start;
query();
} else {
console.log("Error : " + msg);
browser.close();
}
});
w.on('close', function() {
ws.close();
});
});
}
function timeout (){ //Every 30 minutes, check if more than 2 hours have passed since last response
setTimeout(function () {
if (Date.now() - time > 7200000){ //2 hours
stream.write(n + ",Timeout error \n");
process.exit();
} else {
timeout();
}
}, 1800000); //30 minutes
}
async function query (){
if (result.length === 0){
var ipc=require('node-ipc');
ipc.config.silent = true;
ipc.connectTo("main");
ipc.of.main.emit('message', "DONE");
} else {
n += 1000;
time = Date.now();
const [fileChooser] = await Promise.all([
page.waitForFileChooser(),
page.click('input#load')
]);
await fileChooser.accept([result.shift()]);
}
}
(async () => {
stream.write("items,uncompressed,compressed\n");
init_server();
result = gen_random_content(args.p);
browser = await puppeteer.launch({headless: false});
page = await browser.newPage();
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/download_content.html');
timeout();
query();
})();
const puppeteer = require('puppeteer'); "use strict";
const Server = require('ws').Server;
var cut_file = require("./random_gen").cut_file;
const puppeteer = require("puppeteer");
const Server = require("ws").Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : download_index.js -file file_path") .usage("Usage : download_index.js -file file_path")
.demandOption(['file']) .demandOption(["file"])
.alias("f", "file") .alias("f", "file")
.describe("file", "file containing content, data must follow the CSV standard") .alias("l", "link")
.nargs("file", 1) .describe("link", "link to website treating the data, defaults to Mynij")
.argv; .describe("file", "file containing content, data must follow the CSV standard")
.nargs("file", 1)
.nargs("link", 1)
.argv;
var link = args.link
? args.link
: "https://softinst115787.host.vifib.net/public/unit_tests/" +
"download_index.html";
var browser, var browser;
start; var start;
var n = 0;
var time;
var page;
var files;
function init_server (){ function init_server (){
var port = 9030; var port = 9030;
var ws = new Server({port: port}); var ws = new Server({port: port});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(msg){
if (msg === "Start"){ if (msg === "Start"){
start = Date.now(); start = Date.now();
} else if (msg === "Done"){ } else if (msg === "Done"){
var total = Date.now() - start; var total = Date.now() - start;
//console.log("Time spent : " + total/1000 + "s"); process.send(total/1000);
process.send(total/1000); process.send("DONE");
process.send("DONE"); } else {
// NEED TO SEND SIZE console.log("Error : " + msg);
} else { browser.close();
console.log("Error : " + msg); }
browser.close(); });
} w.on("close", function() {
ws.close();
});
}); });
w.on('close', function() { }
ws.close();
}); function timeout (){
}); setTimeout(function () {
if (Date.now() - time > 7200000){ //2 hours
process.send(n + ",Timeout error \n");
files = [];
query();
} else {
timeout();
}
}, 1800000); //30 minutes
}
async function query (){
if (files.length === 0){
var ipc=require("node-ipc");
ipc.config.silent = true;
ipc.connectTo("main");
ipc.of.main.emit("message", "DONE");
return;
} else {
n += 1000;
time = Date.now();
const [fileChooser] = await Promise.all([
page.waitForFileChooser(),
page.click("input#load")
]);
await fileChooser.accept([files.shift()]);
}
} }
(async () => { (async () => {
init_server(); files = cut_file(args.file, 1000);
browser = await puppeteer.launch({headless: false}); init_server();
var page = await browser.newPage(); browser = await puppeteer.launch({headless: false});
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/download_index.html'); page = await browser.newPage();
const [fileChooser] = await Promise.all([ await page.goto(link);
page.waitForFileChooser(), timeout();
page.click('input#load') query();
]);
await fileChooser.accept([args.file]);
})(); })();
var gen_random_content = require('./random_gen').gen_random_content;
const puppeteer = require('puppeteer');
const Server = require('ws').Server;
const fs = require('fs');
var stream = fs.createWriteStream("./results/index_random_size.csv", {flags:'a'});
fs.truncateSync("./results/index_random_size.csv");
const args = require("yargs")
.usage("Usage : download_index_random.js -p number of random paragraphs to add to the index")
.demandOption(['paragraphs'])
.alias("p", "paragraphs")
.describe("paragraphs", "Number of random paragraphs to generate")
.nargs("p", 1)
.argv;
var start,
browser,
page,
result,
n=0,
time;
function init_server (){
var port = 9030;
var ws = new Server({port: port});
ws.on('connection', function(w){
w.on('message', function(msg){
if (msg === "Start"){
start = Date.now();
} else if (msg === "Done"){
var total = Date.now() - start;
query();
} else {
console.log("Error : " + msg);
browser.close();
}
});
w.on('close', function() {
ws.close();
});
});
}
function timeout (){ //Every 30 minutes, check if more than 2 hours have passed since last response
setTimeout(function () {
if (Date.now() - time > 7200000){ //2 hours
stream.write(n + ",Timeout error \n");
process.exit();
} else {
timeout();
}
}, 1800000); //30 minutes
}
async function query (){
if (result.length === 0){
var ipc=require('node-ipc');
ipc.config.silent = true;
ipc.connectTo("main");
ipc.of.main.emit('message', "DONE");
} else {
n += 1000;
time = Date.now();
const [fileChooser] = await Promise.all([
page.waitForFileChooser(),
page.click('input#load')
]);
await fileChooser.accept([result.shift()]);
}
}
(async () => {
stream.write("items,uncompressed,compressed\n");
init_server();
result = gen_random_content(args.p);
browser = await puppeteer.launch({headless: false});
var page = await browser.newPage();
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/download_index.html');
timeout();
query();
})();
const puppeteer = require('puppeteer'); const puppeteer = require("puppeteer");
const Server = require('ws').Server; const Server = require("ws").Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : export_content.js -file file_path") .usage("Usage : export_content.js -file file_path")
.demandOption(['file']) .demandOption(["file"])
.alias("f", "file") .alias("f", "file")
.describe("file", "file containing content, data must be ZIP") .describe("file", "file containing content, data must be ZIP")
.nargs("file", 1) .nargs("file", 1)
.argv; .alias("l", "link")
.describe("link", "link to website treating the data, defaults to Mynij")
.nargs("link", 1)
.argv;
var browser, var link = args.link
start, ? args.link
zip, : "https://softinst115787.host.vifib.net/public/unit_tests/" +
plain_start, "export_content.html";
plain;
var browser;
var start;
var zip;
var plain_start;
var plain;
function init_server (){ function init_server (){
var port = 9030; var port = 9030;
var ws = new Server({port: port}); var ws = new Server({port: port});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(msg){
if (msg === "Start"){ if (msg === "Start"){
start = Date.now(); start = Date.now();
} else if (msg === "Zip"){ } else if (msg === "Zip"){
zip = Date.now() - start; zip = Date.now() - start;
plain_start = Date.now(); plain_start = Date.now();
} else if (msg === "JSON"){ } else if (msg === "JSON"){
plain = Date.now() - plain_start; plain = Date.now() - plain_start;
process.send(zip/1000 + "," +plain/1000); process.send(zip/1000 + "," +plain/1000);
process.send("DONE"); process.send("DONE");
ws.close(); ws.close();
browser.close(); browser.close();
} else { } else {
console.log("Error : " + msg); console.log("Error : " + msg);
browser.close(); browser.close();
} }
}); });
w.on('close', function() { w.on("close", function() {
ws.close(); ws.close();
});
}); });
});
} }
(async () => { (async () => {
init_server(); init_server();
browser = await puppeteer.launch(); browser = await puppeteer.launch();
var page = await browser.newPage(); var page = await browser.newPage();
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/export_content.html'); await page.goto(link);
const [fileChooser] = await Promise.all([ const [fileChooser] = await Promise.all([
page.waitForFileChooser(), page.waitForFileChooser(),
page.click('input#load') page.click("input#load")
]); ]);
await fileChooser.accept([args.file]); await fileChooser.accept([args.file]);
})(); })();
const puppeteer = require('puppeteer'); const puppeteer = require("puppeteer");
const Server = require('ws').Server; const Server = require("ws").Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : export_index.js -file file_path") .usage("Usage : export_index.js -file file_path")
.demandOption(['file']) .demandOption(["file"])
.alias("f", "file") .alias("f", "file")
.describe("file", "file containing content, data must follow JSON standard") .describe("file", "file containing content, data must follow JSON standard")
.nargs("file", 1) .nargs("file", 1)
.argv; .alias("l", "link")
.describe("link", "link to website treating the data, defaults to Mynij")
.nargs("link", 1)
.argv;
var browser, var link = args.link
start, ? args.link
zip, : "https://softinst115787.host.vifib.net/public/unit_tests/" +
plain_start, "export_index.html";
plain;
var browser;
var start;
var zip;
var plain_start;
var plain;
function init_server (){ function init_server (){
var port = 9030; var port = 9030;
var ws = new Server({port: port}); var ws = new Server({port: port});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(msg){
if (msg === "Start"){ if (msg === "Start"){
start = Date.now(); start = Date.now();
} else if (msg === "Zip"){ } else if (msg === "Zip"){
zip = Date.now() - start; zip = Date.now() - start;
plain_start = Date.now(); plain_start = Date.now();
} else if (msg === "JSON"){ } else if (msg === "JSON"){
plain = Date.now() - plain_start; plain = Date.now() - plain_start;
process.send(zip/1000 + "," +plain/1000); process.send(zip/1000 + "," +plain/1000);
process.send("DONE"); process.send("DONE");
ws.close(); ws.close();
browser.close(); browser.close();
} else { } else {
console.log("Error : " + msg); console.log("Error : " + msg);
browser.close(); browser.close();
} }
}); });
w.on('close', function() { w.on("close", function() {
ws.close(); ws.close();
});
}); });
});
} }
(async () => { (async () => {
init_server(); init_server();
browser = await puppeteer.launch(); browser = await puppeteer.launch();
var page = await browser.newPage(); var page = await browser.newPage();
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/export_index.html'); await page.goto(link);
const [fileChooser] = await Promise.all([ const [fileChooser] = await Promise.all([
page.waitForFileChooser(), page.waitForFileChooser(),
page.click('input#load') page.click("input#load")
]); ]);
await fileChooser.accept([args.file]); await fileChooser.accept([args.file]);
})(); })();
const randomstring = require("randomstring"); const randomstring = require("randomstring");
const fs = require('fs'); const fs = require("fs");
const args = require("yargs") const args = require("yargs")
.usage("Usage : gen_random_rss.js -n number of items to generate") .usage("Usage : gen_random_rss.js -n number of items to generate")
.demandOption(['number']) .demandOption(["number"])
.alias("n", "number") .alias("n", "number")
.describe("number", "Number of random items to generate") .describe("number", "Number of random items to generate")
.nargs("number", 1) .nargs("number", 1)
.argv; .argv;
function gen_rdm_string (length){ function gen_rdm_string (length){
return randomstring.generate({ return randomstring.generate({
length: length, length: length,
charset: 'alphabetic' charset: "alphabetic"
}); });
} }
function gen_rdm_sentence (word_count, word_length){ function gen_rdm_sentence (word_count, word_length){
var tmp_word_array = []; var tmp_word_array = [];
for (var i = 0; i<word_count; i+=1){ for (var i = 0; i<word_count; i+=1){
tmp_word_array[i] = gen_rdm_string(word_length); tmp_word_array[i] = gen_rdm_string(word_length);
} }
return tmp_word_array.join(" "); return tmp_word_array.join(" ");
} }
function gen_rdm_paragraph (sentence_count, words_per_sentence, word_length){ function gen_rdm_paragraph (sentence_count, words_per_sentence, word_length){
var tmp_sentence_array = []; var tmp_sentence_array = [];
for (var i=0; i<sentence_count; i+=1){ for (var i=0; i<sentence_count; i+=1){
tmp_sentence_array[i] = gen_rdm_sentence(words_per_sentence, word_length); tmp_sentence_array[i] = gen_rdm_sentence(words_per_sentence, word_length);
} }
return tmp_sentence_array.join(". "); return tmp_sentence_array.join(". ");
} }
function gen_random_content (){ function gen_random_content (){
var to_write = "<rss version=\"0.91\"><channel><title>RSS TEST FILE</title><link>http://example.com/</link><description>A randomly generated RSS File</description>\n"; var to_write = "<rss version=\"0.91\"><channel><title>RSS TEST FILE</title><link>http://example.com/</link><description>A randomly generated RSS File</description>\n";
for (var i = 0; i<args.n; i+=1){ for (var i = 0; i<args.n; i+=1){
to_write += "<item>\n<title>\n"; to_write += "<item>\n<title>\n";
to_write += gen_rdm_sentence(5, 10); to_write += gen_rdm_sentence(5, 10);
to_write += "\n</title>\n<link>\n"; to_write += "\n</title>\n<link>\n";
to_write += "https://"+gen_rdm_string(5)+".com"; to_write += "https://"+gen_rdm_string(5)+".com";
to_write += "\n</link>\n<description>\n"; to_write += "\n</link>\n<description>\n";
to_write += gen_rdm_paragraph(15, 10, 6); to_write += gen_rdm_paragraph(15, 10, 6);
to_write += "\n</description>\n</item> \n"; to_write += "\n</description>\n</item> \n";
} }
to_write += "</channel> </rss>"; to_write += "</channel> </rss>";
return to_write; return to_write;
} }
var to_write = gen_random_content(); var to_write = gen_random_content();
fs.writeFile("./test_files/RSS/rss_"+args.n+".xml", to_write, function(err){ fs.writeFile("./test_files/RSS/rss_"+args.n+".xml", to_write, function(err){
if(err) return console.log(err); if(err) return console.log(err);
console.log("The file was saved!"); console.log("The file was saved!");
}); });
const puppeteer = require('puppeteer'); const puppeteer = require("puppeteer");
const Server = require('ws').Server; const Server = require("ws").Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : import_content.js -file file_path -u if uncompressed file -b for bulk") .usage("Usage : import_content.js -file file_path " +
.demandOption(['file']) "-u if uncompressed file -b for bulk")
.alias("f", "file") .demandOption(["file"])
.alias("u", "uncompressed") .alias("f", "file")
.alias("b", "bulk") .alias("u", "uncompressed")
.describe("file", "file containing the index") .alias("b", "bulk")
.describe("uncompressed", "to add if file is uncompressed ! For testing only !") .describe("file", "file containing the index")
.describe("bulk", "adds items to db in bulk. Much faster but still in testing") .describe("uncompressed", "to add if file is uncompressed ! For testing only !")
.nargs("file", 1) .describe("bulk", "adds items to db in bulk. Much faster but still in testing")
.nargs("u", 0) .nargs("file", 1)
.nargs("b", 0) .nargs("u", 0)
.argv; .nargs("b", 0)
.alias("l", "link")
.describe("link", "link to website treating the data, defaults to Mynij")
.nargs("link", 1)
.argv;
var browser, var link;
start;
if (args.link == null) {
link ="https://softinst115787.host.vifib.net/public/unit_tests/";
if (args.uncompressed) {
link += "import_content_uncompressed.html";
} else if (args.bulk) {
link += "import_content_bulk.html";
} else {
link += "import_content.html";
}
} else {
link = args.link;
}
var browser;
var start;
function init_server (){ function init_server (){
var port = 9030; var port = 9030;
var ws = new Server({port: port}); var ws = new Server({port: port});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(msg){
if (msg.includes("Done")){ if (msg.includes("Done")){
var time_spent = Date.now() - start; var time_spent = Date.now() - start;
process.send(time_spent/1000); process.send(time_spent/1000);
process.send("DONE"); process.send("DONE");
// console.log(msg + " in " + time_spent/1000 + "s"); browser.close();
browser.close(); ws.close();
ws.close(); } else {
} else { console.log("Error : " + msg);
console.log("Error : " + msg); browser.close();
browser.close(); ws.close();
ws.close(); }
} });
}); w.on("close", function() {
w.on('close', function() { ws.close();
ws.close(); });
}); });
});
} }
(async () => { (async () => {
init_server(); init_server();
browser = await puppeteer.launch(); browser = await puppeteer.launch();
var page = await browser.newPage(); var page = await browser.newPage();
if (args.uncompressed) await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/import_content_uncompressed.html'); await page.goto(link);
else if (args.bulk) await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/import_content_bulk.html'); start = Date.now();
else await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/import_content.html'); const [fileChooser] = await Promise.all([
start = Date.now(); page.waitForFileChooser(),
const [fileChooser] = await Promise.all([ page.click("input#load")
page.waitForFileChooser(), ]);
page.click('input#load') await fileChooser.accept([args.file]);
]);
await fileChooser.accept([args.file]);
})(); })();
const puppeteer = require('puppeteer'); const puppeteer = require("puppeteer");
const Server = require('ws').Server; const Server = require("ws").Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : import_index.js -file file_path -u if uncompressed file") .usage("Usage : import_index.js -file file_path -u if uncompressed file")
.demandOption(['file']) .demandOption(["file"])
.alias("f", "file") .alias("f", "file")
.alias("u", "uncompressed") .alias("u", "uncompressed")
.describe("file", "file containing the index") .describe("file", "file containing the index")
.describe("uncompressed", "to add if file is uncompressed ! For testing only !") .describe("uncompressed", "to add if file is uncompressed ! For testing only !")
.nargs("file", 1) .nargs("file", 1)
.nargs("u", 0) .nargs("u", 0)
.argv; .alias("l", "link")
.describe("link", "link to website treating the data, defaults to Mynij")
.nargs("link", 1)
.argv;
var link;
if (args.link == null) {
link ="https://softinst115787.host.vifib.net/public/unit_tests/";
if (args.uncompressed) {
link += "import_index_uncompressed.html";
} else {
link += "import_index.html";
}
} else {
link = args.link;
}
var browser, var browser,
start; start;
function init_server (){ function init_server (){
var port = 9030; var port = 9030;
var ws = new Server({port: port}); var ws = new Server({port: port});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(msg){
if (msg.includes("Done : ")){ if (msg.includes("Done : ")){
var time_spent = Date.now() - start; var time_spent = Date.now() - start;
process.send(time_spent/1000); process.send(time_spent/1000);
process.send("DONE"); process.send("DONE");
browser.close(); browser.close();
} else { } else {
console.log("Error : " + msg); console.log("Error : " + msg);
browser.close(); browser.close();
} }
}); });
w.on('close', function() { w.on("close", function() {
ws.close(); ws.close();
});
}); });
});
} }
(async () => { (async () => {
init_server(); init_server();
browser = await puppeteer.launch(); browser = await puppeteer.launch();
var page = await browser.newPage(); var page = await browser.newPage();
if (args.uncompressed) await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/import_index_uncompressed.html'); await page.goto(link);
else await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/import_index.html'); start = Date.now();
start = Date.now(); const [fileChooser] = await Promise.all([
const [fileChooser] = await Promise.all([ page.waitForFileChooser(),
page.waitForFileChooser(), page.click("input#load")
page.click('input#load') ]);
]); await fileChooser.accept([args.file]);
await fileChooser.accept([args.file]);
})(); })();
var diskspace = require('diskspace');
var os_utils = require('os-utils');
const puppeteer = require('puppeteer');
const Server = require('ws').Server;
const args = require("yargs")
.usage("Usage : load_index.js -saveAs metadata/attachment -file file_path")
.demandOption(['file'])
.demandOption(['saveAs'])
.alias("f", "file")
.alias("s", "saveAs")
.describe("file", "file containing content to put in the index, data must follow the CSV standard")
.describe("saveAs", "choose whether to save the index as metadata or attachments in the indexeddb")
.nargs("file", 1)
.nargs("saveAs", 1)
.argv;
if (!(args.saveAs === "metadata" ||args.saveAs === "attachment")){
throw 'Unrecognized save as argument';
}
var saveAs = args.saveAs,
browser,
page,
ramBefore,
memBefore
adding_start,
adding_total,
saving_start,
saving_total;
function init_server (){
var port = 9030;
var ws = new Server({port: port});
ws.on('connection', function(w){
w.on('message', function(msg){
if (msg === "started adding"){
adding_start = Date.now();
} else if (msg === "started saving"){
adding_total = Date.now() - adding_start;
saving_start = Date.now();
} else if (msg === "finished saving"){
saving_total = Date.now() - saving_start;
} else if (msg.includes("done !")) {
diskspace.check('C', function (err, result){
var memUsed = (result.used/1024/1024) - memBefore;
os_utils.cpuUsage(function(v){
var ramUsed = v - ramBefore;
process.send(ramUsed + "," + memUsed+ "," + adding_total + "," + saving_total);
process.send("DONE");
});
});
browser.close();
} else {
console.log("Error : " + msg);
browser.close();
}
});
w.on('close', function() {
ws.close();
});
});
}
(async () => {
init_server();
browser = await puppeteer.launch();
page = await browser.newPage();
os_utils.cpuUsage(function(v){
ramBefore = v;
});
diskspace.check('C', function (err, result){
memBefore = result.used/1024/1024;
});
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/index_load.html?saveAs='+saveAs);
const [fileChooser] = await Promise.all([
page.waitForFileChooser(),
page.click('input#load')
]);
await fileChooser.accept([args.file]);
})();
// var gen_random_content = require('./random_gen').gen_random_content;
// var diskspace = require('diskspace');
// var os_utils = require('os-utils');
// const fs = require('fs');
// const puppeteer = require('puppeteer');
// const Server = require('ws').Server;
// const args = require("yargs")
// .usage("Usage : load_index.js -saveAs metadata/attachment -p Number of random paragraphs to generate")
// .demandOption(['saveAs'])
// .demandOption(['paragraphs'])
// .alias("p", "paragraphs")
// .alias("s", "saveAs")
// .describe("paragraphs", "Number of random paragraphs to generate")
// .describe("saveAs", "choose whether to save the index as metadata or attachments in the indexeddb")
// .nargs("saveAs", 1)
// .nargs("paragraphs", 1)
// .argv;
//
// if (!(args.saveAs === "metadata" ||args.saveAs === "attachment")){
// throw 'Unrecognized save as argument';
// }
// var saveAs = args.saveAs,
// browser,
// page,
// ramBefore,
// memBefore,
// adding_start,
// adding_total,
// saving_start,
// saving_total;
//
// function init_server (){
// var port = 9030;
// var ws = new Server({port: port});
// ws.on('connection', function(w){
// w.on('message', function(msg){
// if (msg === "started adding"){
// adding_start = Date.now();
// } else if (msg === "started saving"){
// adding_total = Date.now() - adding_start;
// saving_start = Date.now();
// } else if (msg === "finished saving"){
// saving_total = Date.now() - saving_start;
// } else if (msg.includes("done !")) {
// diskspace.check('C', function (err, result){
// var memUsed = (result.used/1024/1024) - memBefore;
// os_utils.cpuUsage(function(v){
// var ramUsed = v - ramBefore;
// process.send(ramUsed + "," + memUsed+ "," + adding_total + "," + saving_total);
// });
// });
// browser.close();
// } else {
// console.log("Error : " + msg);
// browser.close();
// }
// });
// w.on('close', function() {
// ws.close();
// });
// });
// }
//
// (async () => {
// init_server();
// var file_path = gen_random_content();
// browser = await puppeteer.launch();
// page = await browser.newPage();
// os_utils.cpuUsage(function(v){
// ramBefore = v;
// });
// diskspace.check('C', function (err, result){
// memBefore = result.used/1024/1024;
// });
// await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/index_load.html?saveAs='+saveAs);
// const [fileChooser] = await Promise.all([
// page.waitForFileChooser(),
// page.click('input#load')
// ]);
// await fileChooser.accept([file_path]);
// })();
/*jslint es6 */
"use strict"; "use strict";
const randomstring = require("randomstring"); const randomstring = require("randomstring");
const tmp = require('tmp'); const tmp = require("tmp");
const fs = require('fs'); const fs = require("fs");
function gen_rdm_string (length){ function gen_rdm_string (length){
return randomstring.generate({ return randomstring.generate({
length: length, length: length,
charset: 'alphabetic' charset: "alphabetic"
}); });
} }
...@@ -19,40 +19,30 @@ function gen_rdm_sentence (word_count, word_length){ ...@@ -19,40 +19,30 @@ function gen_rdm_sentence (word_count, word_length){
function gen_rdm_paragraph (sentence_count, words_per_sentence, word_length){ function gen_rdm_paragraph (sentence_count, words_per_sentence, word_length){
return Array(sentence_count). return Array(sentence_count).
fill(gen_rdm_sentence(words_per_sentence, word_length)). fill(gen_rdm_sentence(words_per_sentence, word_length)).
join(". "); join(". ");
} }
var gen_random_content = function(p){ var gen_random_content = function(p){
//return file containing p paragraphs //return file containing p paragraphs
var tmp_para_array = Array(p).fill(gen_rdm_paragraph(6, 15, 5)); var tmp_para_array = Array(p).fill(gen_rdm_paragraph(6, 15, 5));
var i;
var tmp_file = tmp.fileSync(); var tmp_file = tmp.fileSync();
fs.writeFileSync(tmp_file.name, tmp_para_array.join("\n")); fs.writeFileSync(tmp_file.name, tmp_para_array.join("\n"));
return tmp_file.name; return tmp_file.name;
}; };
var cut_file = function(file_name) { var cut_file = function(file_name, size) {
var result = []; var result = [];
var tmp_file; var tmp_file;
var i; var i;
var data = fs.readFileSync(file_name, 'utf8'); var data = fs.readFileSync(file_name, "utf8");
var split = data.split("\n"); var split = data.split("\n");
for (i=0; i<split.length; i+=1000){ for (i=0; i<split.length; i+=size){
tmp_file = tmp.fileSync(); tmp_file = tmp.fileSync();
fs.writeFileSync(tmp_file.name, split.slice(i, i+1000).join("\n")); fs.writeFileSync(tmp_file.name, split.slice(i, i+size).join("\n"));
result.push(tmp_file.name); result.push(tmp_file.name);
} }
return result; return result;
// fs.readFile(file_name, 'utf8', function(err, data) {
// split = data.split("\n");
// for (i=0; i<split.length; i+=1000){
// tmp_file = tmp.fileSync();
// fs.writeFileSync(tmp_file.name, split.slice(i, i+1000).join("\n"));
// result.push(tmp_file.name);
// }
// return result;
// });
}; };
exports.gen_random_content = gen_random_content; exports.gen_random_content = gen_random_content;
......
const fs = require('fs'); const fs = require("fs");
const util = require('util'); const util = require("util");
const readdir = util.promisify(fs.readdir); const readdir = util.promisify(fs.readdir);
const Rss_parser = require('rss-parser'); const Rss_parser = require("rss-parser");
var rss_parser = new Rss_parser(); var rss_parser = new Rss_parser();
var xml_parser = require('xml2js').parseString; var xml_parser = require("xml2js").parseString;
var to_run_sitemap, var to_run_sitemap;
sitemap_stream; var sitemap_stream;
function run(script, files, stream, callback){ function run(script, files, stream, callback){
var childProcess = require('child_process'); var childProcess = require("child_process");
if (files.length === 0) return; if (files.length === 0) return;
var invoked = false, var invoked = false,
to_run = files.shift(); to_run = files.shift();
process = childProcess.fork(script, ['-f', to_run]); var new_process = childProcess.fork(script, ["-f", to_run]);
process.on('message', function (mes){ new_process.on("message", function (mes){
mes = mes.toString(); mes = mes.toString();
fs.readFile(to_run, (err, data) => { fs.readFile(to_run, (err, data) => {
if (to_run.includes("rss")){ if (to_run.includes("rss")){
rss_parser.parseString(data, (err, result) => { rss_parser.parseString(data, (err, result) => {
stream.write(to_run +","+ result.items.length +","+ mes + "\n"); stream.write(to_run +","+ result.items.length +","+ mes + "\n");
});
} else {
xml_parser(data, (err, result) => {
stream.write(to_run +","+ result.urlset.url.length.toString() +","+ mes + "\n");
});
}
}); });
} else { run(script, files, stream, callback);
xml_parser(data, (err, result) => {
stream.write(to_run +","+ result.urlset.url.length.toString() +","+ mes + "\n");
});
}
}); });
run(script, files, stream, callback);
});
process.on('error', function (err) { new_process.on("error", function (err) {
if (invoked) return; if (invoked) return;
invoked = true; invoked = true;
callback(err); callback(err);
}); });
process.on('exit', function (code) { new_process.on("exit", function () {
callback(); callback();
}); });
} }
function run_sitemap(){ function run_sitemap(){
run("./unit_tests/test_sitemap.js", to_run_sitemap, sitemap_stream, function (){return;}); run("./unit_tests/test_sitemap.js", to_run_sitemap, sitemap_stream, function (){return;});
} }
(async () => { (async () => {
fs.truncateSync("./results/rss.csv"); fs.truncateSync("./results/rss.csv");
fs.truncateSync("./results/sitemap.csv"); fs.truncateSync("./results/sitemap.csv");
var rss_stream = fs.createWriteStream("./results/rss.csv", {flags:'a'}); var rss_stream = fs.createWriteStream("./results/rss.csv", {flags:"a"});
sitemap_stream = fs.createWriteStream("./results/sitemap.csv", {flags:'a'}); sitemap_stream = fs.createWriteStream("./results/sitemap.csv", {flags:"a"});
rss_stream.write("file name,items,items in index,title found,content complete\n"); rss_stream.write("file name,items,items in index,title found,content complete\n");
sitemap_stream.write("file name,items,items in index,title found,content complete\n"); sitemap_stream.write("file name,items,items in index,title found,content complete\n");
var rss_files = await readdir("./files/RSS"); var rss_files = await readdir("./files/RSS");
to_run_rss = rss_files.map(file => "./files/RSS/" + file); var to_run_rss = rss_files.map(file => "./files/RSS/" + file);
var sitemap_files = await readdir("./files/SITEMAP"); var sitemap_files = await readdir("./files/SITEMAP");
to_run_sitemap = sitemap_files.map(file => "./files/SITEMAP/" + file); to_run_sitemap = sitemap_files.map(file => "./files/SITEMAP/" + file);
run("./unit_tests/test_rss.js", to_run_rss, rss_stream, run_sitemap); run("./unit_tests/test_rss.js", to_run_rss, rss_stream, run_sitemap);
})(); })();
const puppeteer = require('puppeteer'); const puppeteer = require("puppeteer");
const Server = require('ws').Server; const Server = require("ws").Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : test_rss.js -file file_path") .usage("Usage : test_rss.js -file file_path")
.demandOption(['file']) .demandOption(["file"])
.alias("f", "file") .alias("f", "file")
.describe("file", "path to the RSS File") .describe("file", "path to the RSS File")
.nargs("file", 1) .nargs("file", 1)
.argv; .argv;
var browser; var browser;
function init_server (){ function init_server (){
var ws = new Server({port: 9030}); var ws = new Server({port: 9030});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(msg){
ws.close(); ws.close();
process.send(msg); process.send(msg);
browser.close(); browser.close();
});
w.on("close", function() {
ws.close();
});
}); });
w.on('close', function() {
ws.close();
});
});
} }
(async () => { (async () => {
init_server(); init_server();
browser = await puppeteer.launch(); browser = await puppeteer.launch();
var page = await browser.newPage(); var page = await browser.newPage();
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/test_rss.html'); await page.goto("https://softinst115787.host.vifib.net/public/unit_tests/test_rss.html");
const [fileChooser] = await Promise.all([ const [fileChooser] = await Promise.all([
page.waitForFileChooser(), page.waitForFileChooser(),
page.click('input#load') page.click("input#load")
]); ]);
await fileChooser.accept([args.file]); await fileChooser.accept([args.file]);
})(); })();
const puppeteer = require('puppeteer'); const puppeteer = require("puppeteer");
const Server = require('ws').Server; const Server = require("ws").Server;
const args = require("yargs") const args = require("yargs")
.usage("Usage : test_sitemap.js -file file_path") .usage("Usage : test_sitemap.js -file file_path")
.demandOption(['file']) .demandOption(["file"])
.alias("f", "file") .alias("f", "file")
.describe("file", "path to the Sitemap File") .describe("file", "path to the Sitemap File")
.nargs("file", 1) .nargs("file", 1)
.argv; .argv;
var browser; var browser;
function init_server (){ function init_server (){
var ws = new Server({port: 9030}); var ws = new Server({port: 9030});
ws.on('connection', function(w){ ws.on("connection", function(w){
w.on('message', function(msg){ w.on("message", function(msg){
ws.close(); ws.close();
process.send(msg); process.send(msg);
browser.close(); browser.close();
});
w.on("close", function() {
ws.close();
});
}); });
w.on('close', function() {
ws.close();
});
});
} }
(async () => { (async () => {
init_server(); init_server();
browser = await puppeteer.launch(); browser = await puppeteer.launch();
var page = await browser.newPage(); var page = await browser.newPage();
await page.goto('https://softinst115787.host.vifib.net/public/unit_tests/test_sitemap.html'); await page.goto("https://softinst115787.host.vifib.net/public/unit_tests/test_sitemap.html");
const [fileChooser] = await Promise.all([ const [fileChooser] = await Promise.all([
page.waitForFileChooser(), page.waitForFileChooser(),
page.click('input#load') page.click("input#load")
]); ]);
await fileChooser.accept([args.file]); await fileChooser.accept([args.file]);
})(); })();
\ No newline at end of file
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../acorn/bin/acorn" "$@"
ret=$?
else
node "$basedir/../acorn/bin/acorn" "$@"
ret=$?
fi
exit $ret
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\acorn\bin\acorn" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\acorn\bin\acorn" %*
)
\ No newline at end of file
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../eslint/bin/eslint.js" "$@"
ret=$?
else
node "$basedir/../eslint/bin/eslint.js" "$@"
ret=$?
fi
exit $ret
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\eslint\bin\eslint.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\eslint\bin\eslint.js" %*
)
\ No newline at end of file
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../esprima/bin/esparse.js" "$@"
ret=$?
else
node "$basedir/../esprima/bin/esparse.js" "$@"
ret=$?
fi
exit $ret
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\esprima\bin\esparse.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\esprima\bin\esparse.js" %*
)
\ No newline at end of file
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../esprima/bin/esvalidate.js" "$@"
ret=$?
else
node "$basedir/../esprima/bin/esvalidate.js" "$@"
ret=$?
fi
exit $ret
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\esprima\bin\esvalidate.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\esprima\bin\esvalidate.js" %*
)
\ No newline at end of file
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../js-yaml/bin/js-yaml.js" "$@"
ret=$?
else
node "$basedir/../js-yaml/bin/js-yaml.js" "$@"
ret=$?
fi
exit $ret
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\js-yaml\bin\js-yaml.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\js-yaml\bin\js-yaml.js" %*
)
\ No newline at end of file
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../semver/bin/semver.js" "$@"
ret=$?
else
node "$basedir/../semver/bin/semver.js" "$@"
ret=$?
fi
exit $ret
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\semver\bin\semver.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\semver\bin\semver.js" %*
)
\ No newline at end of file
MIT License
Copyright (c) 2014-present Sebastian McKenzie and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# @babel/code-frame
> Generate errors that contain a code frame that point to source locations.
See our website [@babel/code-frame](https://babeljs.io/docs/en/next/babel-code-frame.html) for more information.
## Install
Using npm:
```sh
npm install --save-dev @babel/code-frame
```
or using yarn:
```sh
yarn add @babel/code-frame --dev
```
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.codeFrameColumns = codeFrameColumns;
exports.default = _default;
var _highlight = _interopRequireWildcard(require("@babel/highlight"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
let deprecationWarningShown = false;
function getDefs(chalk) {
return {
gutter: chalk.grey,
marker: chalk.red.bold,
message: chalk.red.bold
};
}
const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
function getMarkerLines(loc, source, opts) {
const startLoc = Object.assign({
column: 0,
line: -1
}, loc.start);
const endLoc = Object.assign({}, startLoc, {}, loc.end);
const {
linesAbove = 2,
linesBelow = 3
} = opts || {};
const startLine = startLoc.line;
const startColumn = startLoc.column;
const endLine = endLoc.line;
const endColumn = endLoc.column;
let start = Math.max(startLine - (linesAbove + 1), 0);
let end = Math.min(source.length, endLine + linesBelow);
if (startLine === -1) {
start = 0;
}
if (endLine === -1) {
end = source.length;
}
const lineDiff = endLine - startLine;
const markerLines = {};
if (lineDiff) {
for (let i = 0; i <= lineDiff; i++) {
const lineNumber = i + startLine;
if (!startColumn) {
markerLines[lineNumber] = true;
} else if (i === 0) {
const sourceLength = source[lineNumber - 1].length;
markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];
} else if (i === lineDiff) {
markerLines[lineNumber] = [0, endColumn];
} else {
const sourceLength = source[lineNumber - i].length;
markerLines[lineNumber] = [0, sourceLength];
}
}
} else {
if (startColumn === endColumn) {
if (startColumn) {
markerLines[startLine] = [startColumn, 0];
} else {
markerLines[startLine] = true;
}
} else {
markerLines[startLine] = [startColumn, endColumn - startColumn];
}
}
return {
start,
end,
markerLines
};
}
function codeFrameColumns(rawLines, loc, opts = {}) {
const highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight.shouldHighlight)(opts);
const chalk = (0, _highlight.getChalk)(opts);
const defs = getDefs(chalk);
const maybeHighlight = (chalkFn, string) => {
return highlighted ? chalkFn(string) : string;
};
const lines = rawLines.split(NEWLINE);
const {
start,
end,
markerLines
} = getMarkerLines(loc, lines, opts);
const hasColumns = loc.start && typeof loc.start.column === "number";
const numberMaxWidth = String(end).length;
const highlightedLines = highlighted ? (0, _highlight.default)(rawLines, opts) : rawLines;
let frame = highlightedLines.split(NEWLINE).slice(start, end).map((line, index) => {
const number = start + 1 + index;
const paddedNumber = ` ${number}`.slice(-numberMaxWidth);
const gutter = ` ${paddedNumber} | `;
const hasMarker = markerLines[number];
const lastMarkerLine = !markerLines[number + 1];
if (hasMarker) {
let markerLine = "";
if (Array.isArray(hasMarker)) {
const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " ");
const numberOfMarkers = hasMarker[1] || 1;
markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join("");
if (lastMarkerLine && opts.message) {
markerLine += " " + maybeHighlight(defs.message, opts.message);
}
}
return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line, markerLine].join("");
} else {
return ` ${maybeHighlight(defs.gutter, gutter)}${line}`;
}
}).join("\n");
if (opts.message && !hasColumns) {
frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`;
}
if (highlighted) {
return chalk.reset(frame);
} else {
return frame;
}
}
function _default(rawLines, lineNumber, colNumber, opts = {}) {
if (!deprecationWarningShown) {
deprecationWarningShown = true;
const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.";
if (process.emitWarning) {
process.emitWarning(message, "DeprecationWarning");
} else {
const deprecationError = new Error(message);
deprecationError.name = "DeprecationWarning";
console.warn(new Error(message));
}
}
colNumber = Math.max(colNumber, 0);
const location = {
start: {
column: colNumber,
line: lineNumber
}
};
return codeFrameColumns(rawLines, location, opts);
}
\ No newline at end of file
{
"_from": "@babel/code-frame@^7.0.0",
"_id": "@babel/code-frame@7.8.3",
"_inBundle": false,
"_integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
"_location": "/@babel/code-frame",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "@babel/code-frame@^7.0.0",
"name": "@babel/code-frame",
"escapedName": "@babel%2fcode-frame",
"scope": "@babel",
"rawSpec": "^7.0.0",
"saveSpec": null,
"fetchSpec": "^7.0.0"
},
"_requiredBy": [
"/eslint"
],
"_resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
"_shasum": "33e25903d7481181534e12ec0a25f16b6fcf419e",
"_spec": "@babel/code-frame@^7.0.0",
"_where": "C:\\Users\\thequ\\Documents\\Mynij\\Mynij-unit-tests\\node_modules\\eslint",
"author": {
"name": "Sebastian McKenzie",
"email": "sebmck@gmail.com"
},
"bundleDependencies": false,
"dependencies": {
"@babel/highlight": "^7.8.3"
},
"deprecated": false,
"description": "Generate errors that contain a code frame that point to source locations.",
"devDependencies": {
"chalk": "^2.0.0",
"strip-ansi": "^4.0.0"
},
"gitHead": "a7620bd266ae1345975767bbc7abf09034437017",
"homepage": "https://babeljs.io/",
"license": "MIT",
"main": "lib/index.js",
"name": "@babel/code-frame",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "https://github.com/babel/babel/tree/master/packages/babel-code-frame"
},
"version": "7.8.3"
}
MIT License
Copyright (c) 2014-present Sebastian McKenzie and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# @babel/highlight
> Syntax highlight JavaScript strings for output in terminals.
See our website [@babel/highlight](https://babeljs.io/docs/en/next/babel-highlight.html) for more information.
## Install
Using npm:
```sh
npm install --save-dev @babel/highlight
```
or using yarn:
```sh
yarn add @babel/highlight --dev
```
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.shouldHighlight = shouldHighlight;
exports.getChalk = getChalk;
exports.default = highlight;
var _jsTokens = _interopRequireWildcard(require("js-tokens"));
var _esutils = _interopRequireDefault(require("esutils"));
var _chalk = _interopRequireDefault(require("chalk"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function getDefs(chalk) {
return {
keyword: chalk.cyan,
capitalized: chalk.yellow,
jsx_tag: chalk.yellow,
punctuator: chalk.yellow,
number: chalk.magenta,
string: chalk.green,
regex: chalk.magenta,
comment: chalk.grey,
invalid: chalk.white.bgRed.bold
};
}
const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
const JSX_TAG = /^[a-z][\w-]*$/i;
const BRACKET = /^[()[\]{}]$/;
function getTokenType(match) {
const [offset, text] = match.slice(-2);
const token = (0, _jsTokens.matchToToken)(match);
if (token.type === "name") {
if (_esutils.default.keyword.isReservedWordES6(token.value)) {
return "keyword";
}
if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == "</")) {
return "jsx_tag";
}
if (token.value[0] !== token.value[0].toLowerCase()) {
return "capitalized";
}
}
if (token.type === "punctuator" && BRACKET.test(token.value)) {
return "bracket";
}
if (token.type === "invalid" && (token.value === "@" || token.value === "#")) {
return "punctuator";
}
return token.type;
}
function highlightTokens(defs, text) {
return text.replace(_jsTokens.default, function (...args) {
const type = getTokenType(args);
const colorize = defs[type];
if (colorize) {
return args[0].split(NEWLINE).map(str => colorize(str)).join("\n");
} else {
return args[0];
}
});
}
function shouldHighlight(options) {
return _chalk.default.supportsColor || options.forceColor;
}
function getChalk(options) {
let chalk = _chalk.default;
if (options.forceColor) {
chalk = new _chalk.default.constructor({
enabled: true,
level: 1
});
}
return chalk;
}
function highlight(code, options = {}) {
if (shouldHighlight(options)) {
const chalk = getChalk(options);
const defs = getDefs(chalk);
return highlightTokens(defs, code);
} else {
return code;
}
}
\ No newline at end of file
{
"_from": "@babel/highlight@^7.8.3",
"_id": "@babel/highlight@7.8.3",
"_inBundle": false,
"_integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
"_location": "/@babel/highlight",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "@babel/highlight@^7.8.3",
"name": "@babel/highlight",
"escapedName": "@babel%2fhighlight",
"scope": "@babel",
"rawSpec": "^7.8.3",
"saveSpec": null,
"fetchSpec": "^7.8.3"
},
"_requiredBy": [
"/@babel/code-frame"
],
"_resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
"_shasum": "28f173d04223eaaa59bc1d439a3836e6d1265797",
"_spec": "@babel/highlight@^7.8.3",
"_where": "C:\\Users\\thequ\\Documents\\Mynij\\Mynij-unit-tests\\node_modules\\@babel\\code-frame",
"author": {
"name": "suchipi",
"email": "me@suchipi.com"
},
"bundleDependencies": false,
"dependencies": {
"chalk": "^2.0.0",
"esutils": "^2.0.2",
"js-tokens": "^4.0.0"
},
"deprecated": false,
"description": "Syntax highlight JavaScript strings for output in terminals.",
"devDependencies": {
"strip-ansi": "^4.0.0"
},
"gitHead": "a7620bd266ae1345975767bbc7abf09034437017",
"homepage": "https://babeljs.io/",
"license": "MIT",
"main": "lib/index.js",
"name": "@babel/highlight",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "https://github.com/babel/babel/tree/master/packages/babel-highlight"
},
"version": "7.8.3"
}
Copyright (C) 2012-2017 by Ingvar Stepanyan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
# Acorn-JSX
[![Build Status](https://travis-ci.org/acornjs/acorn-jsx.svg?branch=master)](https://travis-ci.org/acornjs/acorn-jsx)
[![NPM version](https://img.shields.io/npm/v/acorn-jsx.svg)](https://www.npmjs.org/package/acorn-jsx)
This is plugin for [Acorn](http://marijnhaverbeke.nl/acorn/) - a tiny, fast JavaScript parser, written completely in JavaScript.
It was created as an experimental alternative, faster [React.js JSX](http://facebook.github.io/react/docs/jsx-in-depth.html) parser. Later, it replaced the [official parser](https://github.com/facebookarchive/esprima) and these days is used by many prominent development tools.
## Transpiler
Please note that this tool only parses source code to JSX AST, which is useful for various language tools and services. If you want to transpile your code to regular ES5-compliant JavaScript with source map, check out [Babel](https://babeljs.io/) and [Buble](https://buble.surge.sh/) transpilers which use `acorn-jsx` under the hood.
## Usage
Requiring this module provides you with an Acorn plugin that you can use like this:
```javascript
var acorn = require("acorn");
var jsx = require("acorn-jsx");
acorn.Parser.extend(jsx()).parse("my(<jsx/>, 'code');");
```
Note that official spec doesn't support mix of XML namespaces and object-style access in tag names (#27) like in `<namespace:Object.Property />`, so it was deprecated in `acorn-jsx@3.0`. If you still want to opt-in to support of such constructions, you can pass the following option:
```javascript
acorn.Parser.extend(jsx({ allowNamespacedObjects: true }))
```
Also, since most apps use pure React transformer, a new option was introduced that allows to prohibit namespaces completely:
```javascript
acorn.Parser.extend(jsx({ allowNamespaces: false }))
```
Note that by default `allowNamespaces` is enabled for spec compliancy.
## License
This plugin is issued under the [MIT license](./LICENSE).
This diff is collapsed.
{
"_from": "acorn-jsx@^5.1.0",
"_id": "acorn-jsx@5.1.0",
"_inBundle": false,
"_integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
"_location": "/acorn-jsx",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "acorn-jsx@^5.1.0",
"name": "acorn-jsx",
"escapedName": "acorn-jsx",
"rawSpec": "^5.1.0",
"saveSpec": null,
"fetchSpec": "^5.1.0"
},
"_requiredBy": [
"/espree"
],
"_resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
"_shasum": "294adb71b57398b0680015f0a38c563ee1db5384",
"_spec": "acorn-jsx@^5.1.0",
"_where": "C:\\Users\\thequ\\Documents\\Mynij\\Mynij-unit-tests\\node_modules\\espree",
"bugs": {
"url": "https://github.com/acornjs/acorn-jsx/issues"
},
"bundleDependencies": false,
"deprecated": false,
"description": "Modern, fast React.js JSX parser",
"devDependencies": {
"acorn": "^7.0.0"
},
"homepage": "https://github.com/acornjs/acorn-jsx",
"license": "MIT",
"maintainers": [
{
"name": "Ingvar Stepanyan",
"email": "me@rreverser.com",
"url": "http://rreverser.com/"
}
],
"name": "acorn-jsx",
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0"
},
"repository": {
"type": "git",
"url": "git+https://github.com/acornjs/acorn-jsx.git"
},
"scripts": {
"test": "node test/run.js"
},
"version": "5.1.0"
}
module.exports = {
quot: '\u0022',
amp: '&',
apos: '\u0027',
lt: '<',
gt: '>',
nbsp: '\u00A0',
iexcl: '\u00A1',
cent: '\u00A2',
pound: '\u00A3',
curren: '\u00A4',
yen: '\u00A5',
brvbar: '\u00A6',
sect: '\u00A7',
uml: '\u00A8',
copy: '\u00A9',
ordf: '\u00AA',
laquo: '\u00AB',
not: '\u00AC',
shy: '\u00AD',
reg: '\u00AE',
macr: '\u00AF',
deg: '\u00B0',
plusmn: '\u00B1',
sup2: '\u00B2',
sup3: '\u00B3',
acute: '\u00B4',
micro: '\u00B5',
para: '\u00B6',
middot: '\u00B7',
cedil: '\u00B8',
sup1: '\u00B9',
ordm: '\u00BA',
raquo: '\u00BB',
frac14: '\u00BC',
frac12: '\u00BD',
frac34: '\u00BE',
iquest: '\u00BF',
Agrave: '\u00C0',
Aacute: '\u00C1',
Acirc: '\u00C2',
Atilde: '\u00C3',
Auml: '\u00C4',
Aring: '\u00C5',
AElig: '\u00C6',
Ccedil: '\u00C7',
Egrave: '\u00C8',
Eacute: '\u00C9',
Ecirc: '\u00CA',
Euml: '\u00CB',
Igrave: '\u00CC',
Iacute: '\u00CD',
Icirc: '\u00CE',
Iuml: '\u00CF',
ETH: '\u00D0',
Ntilde: '\u00D1',
Ograve: '\u00D2',
Oacute: '\u00D3',
Ocirc: '\u00D4',
Otilde: '\u00D5',
Ouml: '\u00D6',
times: '\u00D7',
Oslash: '\u00D8',
Ugrave: '\u00D9',
Uacute: '\u00DA',
Ucirc: '\u00DB',
Uuml: '\u00DC',
Yacute: '\u00DD',
THORN: '\u00DE',
szlig: '\u00DF',
agrave: '\u00E0',
aacute: '\u00E1',
acirc: '\u00E2',
atilde: '\u00E3',
auml: '\u00E4',
aring: '\u00E5',
aelig: '\u00E6',
ccedil: '\u00E7',
egrave: '\u00E8',
eacute: '\u00E9',
ecirc: '\u00EA',
euml: '\u00EB',
igrave: '\u00EC',
iacute: '\u00ED',
icirc: '\u00EE',
iuml: '\u00EF',
eth: '\u00F0',
ntilde: '\u00F1',
ograve: '\u00F2',
oacute: '\u00F3',
ocirc: '\u00F4',
otilde: '\u00F5',
ouml: '\u00F6',
divide: '\u00F7',
oslash: '\u00F8',
ugrave: '\u00F9',
uacute: '\u00FA',
ucirc: '\u00FB',
uuml: '\u00FC',
yacute: '\u00FD',
thorn: '\u00FE',
yuml: '\u00FF',
OElig: '\u0152',
oelig: '\u0153',
Scaron: '\u0160',
scaron: '\u0161',
Yuml: '\u0178',
fnof: '\u0192',
circ: '\u02C6',
tilde: '\u02DC',
Alpha: '\u0391',
Beta: '\u0392',
Gamma: '\u0393',
Delta: '\u0394',
Epsilon: '\u0395',
Zeta: '\u0396',
Eta: '\u0397',
Theta: '\u0398',
Iota: '\u0399',
Kappa: '\u039A',
Lambda: '\u039B',
Mu: '\u039C',
Nu: '\u039D',
Xi: '\u039E',
Omicron: '\u039F',
Pi: '\u03A0',
Rho: '\u03A1',
Sigma: '\u03A3',
Tau: '\u03A4',
Upsilon: '\u03A5',
Phi: '\u03A6',
Chi: '\u03A7',
Psi: '\u03A8',
Omega: '\u03A9',
alpha: '\u03B1',
beta: '\u03B2',
gamma: '\u03B3',
delta: '\u03B4',
epsilon: '\u03B5',
zeta: '\u03B6',
eta: '\u03B7',
theta: '\u03B8',
iota: '\u03B9',
kappa: '\u03BA',
lambda: '\u03BB',
mu: '\u03BC',
nu: '\u03BD',
xi: '\u03BE',
omicron: '\u03BF',
pi: '\u03C0',
rho: '\u03C1',
sigmaf: '\u03C2',
sigma: '\u03C3',
tau: '\u03C4',
upsilon: '\u03C5',
phi: '\u03C6',
chi: '\u03C7',
psi: '\u03C8',
omega: '\u03C9',
thetasym: '\u03D1',
upsih: '\u03D2',
piv: '\u03D6',
ensp: '\u2002',
emsp: '\u2003',
thinsp: '\u2009',
zwnj: '\u200C',
zwj: '\u200D',
lrm: '\u200E',
rlm: '\u200F',
ndash: '\u2013',
mdash: '\u2014',
lsquo: '\u2018',
rsquo: '\u2019',
sbquo: '\u201A',
ldquo: '\u201C',
rdquo: '\u201D',
bdquo: '\u201E',
dagger: '\u2020',
Dagger: '\u2021',
bull: '\u2022',
hellip: '\u2026',
permil: '\u2030',
prime: '\u2032',
Prime: '\u2033',
lsaquo: '\u2039',
rsaquo: '\u203A',
oline: '\u203E',
frasl: '\u2044',
euro: '\u20AC',
image: '\u2111',
weierp: '\u2118',
real: '\u211C',
trade: '\u2122',
alefsym: '\u2135',
larr: '\u2190',
uarr: '\u2191',
rarr: '\u2192',
darr: '\u2193',
harr: '\u2194',
crarr: '\u21B5',
lArr: '\u21D0',
uArr: '\u21D1',
rArr: '\u21D2',
dArr: '\u21D3',
hArr: '\u21D4',
forall: '\u2200',
part: '\u2202',
exist: '\u2203',
empty: '\u2205',
nabla: '\u2207',
isin: '\u2208',
notin: '\u2209',
ni: '\u220B',
prod: '\u220F',
sum: '\u2211',
minus: '\u2212',
lowast: '\u2217',
radic: '\u221A',
prop: '\u221D',
infin: '\u221E',
ang: '\u2220',
and: '\u2227',
or: '\u2228',
cap: '\u2229',
cup: '\u222A',
'int': '\u222B',
there4: '\u2234',
sim: '\u223C',
cong: '\u2245',
asymp: '\u2248',
ne: '\u2260',
equiv: '\u2261',
le: '\u2264',
ge: '\u2265',
sub: '\u2282',
sup: '\u2283',
nsub: '\u2284',
sube: '\u2286',
supe: '\u2287',
oplus: '\u2295',
otimes: '\u2297',
perp: '\u22A5',
sdot: '\u22C5',
lceil: '\u2308',
rceil: '\u2309',
lfloor: '\u230A',
rfloor: '\u230B',
lang: '\u2329',
rang: '\u232A',
loz: '\u25CA',
spades: '\u2660',
clubs: '\u2663',
hearts: '\u2665',
diams: '\u2666'
};
This diff is collapsed.
Copyright (C) 2012-2018 by various contributors (see AUTHORS)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment