apigeelint
Version:
Node module to lint and Apigee Edge bundle.
124 lines (107 loc) • 3.45 kB
JavaScript
/**
* @fileoverview pdf style formatter.
* @author Eduardo Andrade
*/
;
const path = require('path');
const fonts = {
Roboto: {
normal: path.join(__dirname, 'fonts/roboto.regular.ttf'),
bold: path.join(__dirname, 'fonts/roboto.bold.ttf'),
italics: path.join(__dirname, 'fonts/roboto.italic.ttf'),
bolditalics: path.join(__dirname, 'fonts/roboto.bold-italic.ttf')
}
};
var PdfPrinter = require('pdfmake'),
printer = new PdfPrinter(fonts),
fs = require('fs'),
pluralize = require("pluralize");
//------------------------------------------------------------------------------
// Helper Functions
//------------------------------------------------------------------------------
/**
* Returns a canonical error level string based upon the error message passed in.
* @param {Object} message Individual error message provided by eslint
* @returns {string} Error level string
*/
function getMessageType(message) {
if (message.fatal || message.severity === 2) {
return "Error";
}
return "Warning";
}
//------------------------------------------------------------------------------
// Public Interface
//------------------------------------------------------------------------------
module.exports = function(results) {
let output = "",
errorCount = 0,
warningCount = 0;
var dd = {
content: [],
styles: {
header: {
fontSize: 18,
bold: true,
margin: [0, 0, 0, 10]
},
subheader: {
fontSize: 16,
bold: true,
margin: [0, 10, 0, 5]
},
tableExample: {
margin: [0, 5, 0, 15]
},
tableHeader: {
bold: true,
fontSize: 13,
color: 'black'
}
},
defaultStyle: {
// alignment: 'justify'
}
};
results.forEach(result => {
const messages = result.messages;
errorCount += result.errorCount;
warningCount += result.warningCount;
if (messages.length > 0) {
var tempContent = { table: { body: [] } };
dd.content.push({text: result.filePath});
tempContent.table.body.push(["Line", "Column", "Type", "Message", "Rule ID"]);
messages.forEach(message => {
tempContent.table.body.push([message.line || 0, message.column || 0, getMessageType(message), message.message, message.ruleId || ""]);
});
dd.content.push(tempContent);
}
});
var tempContent = { table: { body: [] } };
dd.content.push({text: "Summary"});
tempContent.table.body.push([pluralize("Error", errorCount, true)]);
tempContent.table.body.push([pluralize("Warning", warningCount, true)]);
dd.content.push(tempContent);
var pdfDoc = printer.createPdfKitDocument(dd);
var fileName = geReportFilePath();
pdfDoc.pipe(fs.createWriteStream(fileName));
pdfDoc.end();
output = pluralize("Error", errorCount, true) + " / " + pluralize("Warning", warningCount, true) + " - Report exported as a pdf file: " + fileName;
return output;
};
function geReportFilePath() {
var fileName = "apigeelint-report.pdf"; //default file name
try {
var reportPath = process.argv[process.argv.length - 1];
if (reportPath && reportPath.endsWith(".pdf")) {
var reportDir = path.dirname(reportPath);
if (!fs.existsSync(reportDir)) {
fs.mkdirSync(reportDir, { recursive: true });
}
fileName = reportPath
}
} catch(err) {
console.error(err)
}
return fileName;
}