crx2ff
Version:
Check the compatibility of a Chrome extension with the Firefox WebExtensions API.
85 lines (65 loc) • 2.3 kB
JavaScript
var chalk = require('chalk');
function prettifyStatus (status) {
var symbols = {
ok: '✓',
info: 'ℹ',
warn: '⚠',
err: '✖'
};
if (process.platform === 'win32') {
symbols.ok = '\u221A';
symbols.info = '\u2139';
symbols.warn = '\u26A0';
symbols.err = '\u00D7';
}
if (status.type === "SUPPORT" || status.type === "FULL_SUPPORT") {
return chalk.green(symbols.ok);
}
if (status.type === "NO_SUPPORT") {
return chalk.red(symbols.err);
}
if (status.type === "WARN") {
return chalk.yellow(symbols.warn + " " + status.msg);
}
if (status.type === "FUTURE_SUPPORT") {
return chalk.gray.bgBlue(symbols.info + " upcoming");
}
return status.type;
}
function printScriptsReport (report) {
Object.keys(report.used).sort().forEach(function (api) {
console.log(chalk.white.bold.bgMagenta("chrome." + api));
var apiExprs = report.used[api];
Object.keys(apiExprs).sort().forEach(function (expr) {
console.log(" ." + expr + " " + prettifyStatus(apiExprs[expr].status));
apiExprs[expr].filesLocations.forEach(function (file) {
console.log(" " + file.file);
file.locations.forEach(function (loc) {
console.log(" - line: " + loc.line + ", col: " + loc.column);
});
});
console.log("");
});
});
}
function printManifestReport (report) {
report.forEach(function (manifestKey) {
if (!(manifestKey.support instanceof Array)) {
return console.log(" - " + manifestKey.key + " " + prettifyStatus(manifestKey.support));
}
console.log(" - " + manifestKey.key);
manifestKey.support.forEach(function (support) {
console.log(" " + prettifyStatus(support));
});
});
}
function printReport (report) {
console.log(chalk.black.bold.bgYellow("manifest.json support"));
console.log("");
printManifestReport(report.manifestReport);
console.log("");
console.log(chalk.black.bold.bgYellow("API usage support"));
console.log("");
printScriptsReport(report.scriptsReport);
}
module.exports = printReport;