reqover
Version:
Reqover is language agnostic tool that gives a picture about coverage of APIs based on Open API (Swagger).
59 lines (52 loc) • 1.67 kB
JavaScript
const request = require("superagent");
const fs = require("fs");
const admZip = require("adm-zip");
const path = require("path");
const ejs = require("ejs");
const href = "https://github.com/reqover/reqover-report/releases/download";
const name = "report.zip";
const reportDir = ".reqover";
function downloadReport(version) {
const reportZipFile = `${reportDir}/${name}`;
if (!fs.existsSync(reportDir)) {
fs.mkdirSync(reportDir, { recursive: true });
}
if (fs.existsSync(reportZipFile)) {
unzip(reportZipFile, reportDir);
return;
}
request
.get(`${href}/${version}/${name}`)
.on("error", function (error) {
console.log(error);
})
.pipe(fs.createWriteStream(reportZipFile))
.on("finish", function () {
console.log("Download is finished to " + reportDir);
setTimeout(() => {
unzip(reportZipFile, reportDir);
}, 1000);
});
}
function unzip(zipFile, outputDir) {
const zip = new admZip(zipFile);
zip.extractAllTo(outputDir, false, true);
}
function copyData(source, dir, target) {
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
fs.copyFileSync(source, path.join(dir, target));
}
async function generateReport(dataPath, dir) {
const data = JSON.parse(fs.readFileSync(dataPath));
const report = await ejs.renderFile(__dirname + "/template/swagger.ejs", {
data,
});
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
fs.writeFileSync(`${dir}/index.html`, report);
fs.cpSync(__dirname + "/template/assets", `${dir}/assets`, { recursive: true });
}
module.exports = { downloadReport, copyData, generateReport };