fuse-box-typechecker
Version:
Fuse-Box type checker plugin for fusebox 4.0.0 ++
144 lines • 7.45 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.printResult = exports.getResult = void 0;
const interfaces_1 = require("./interfaces");
const path = require("path");
const processTsDiagnostics_1 = require("./processTsDiagnostics");
const logger_1 = require("./logger");
function getResult(options, errors) {
// get the lint errors messages
const tsErrorMessages = processTsDiagnostics_1.processTsDiagnostics(options, errors);
// group by filename
let groupedErrors = {};
tsErrorMessages.forEach((error) => {
if (!groupedErrors[error.fileName]) {
groupedErrors[error.fileName] = [];
}
groupedErrors[error.fileName].push(error);
});
let allErrors = Object.entries(groupedErrors).map(([fileName, errors]) => {
const short = options.shortenFilenames !== false ? true : false;
const fullFileName = path.resolve(fileName);
let shortFileName = fullFileName.split(options.basePath).join('.');
if (path.isAbsolute(shortFileName)) {
// most likely a tsconfig path
shortFileName = path.relative(process.cwd(), fullFileName);
}
else {
// if somepne passes in basepath we need to use that in print
if (options.basePathSetup) {
shortFileName = path.join(options.basePathSetup, shortFileName);
}
}
return (` <cyan><bold><underline>${shortFileName}</underline></bold></cyan> <grey> - ${errors.length} errors.</grey>\n` +
errors
.map((err) => {
const fName = short ? shortFileName : fullFileName;
let text = `<yellow> - ${fName}:${err.line}:${err.char}</yellow><dim> (${err.category}</dim><dim> ${err.code})</dim><dim> ${err.message}</dim>`;
return text;
})
.join(interfaces_1.END_LINE));
});
return allErrors;
}
exports.getResult = getResult;
function printResult(options, errors) {
// get the lint errors messages
const tsErrorMessages = processTsDiagnostics_1.processTsDiagnostics(options, errors);
// group by filename
let groupedErrors = {};
tsErrorMessages.forEach((error) => {
if (!groupedErrors[error.fileName]) {
groupedErrors[error.fileName] = [];
}
groupedErrors[error.fileName].push(error);
});
// get errors totals
const optionsErrors = errors.optionsErrors.length;
const globalErrors = errors.globalErrors.length;
const syntacticErrors = errors.syntacticErrors.length;
const semanticErrors = errors.semanticErrors.length;
const totalsErrors = optionsErrors + globalErrors + syntacticErrors + semanticErrors;
let allErrors = Object.entries(groupedErrors).map(([fileName, errors]) => {
const short = options.shortenFilenames !== false ? true : false;
const fullFileName = path.resolve(fileName);
let shortFileName = fullFileName.split(options.basePath).join('.');
if (path.isAbsolute(shortFileName)) {
// most likely a tsconfig path
shortFileName = path.relative(process.cwd(), fullFileName);
}
else {
// if somepne passes in basepath we need to use that in print
if (options.basePathSetup) {
shortFileName = path.join(options.basePathSetup, shortFileName);
}
}
return (` <cyan><bold><underline>${shortFileName}</underline></bold></cyan> <grey> - ${errors.length} errors.</grey>\n` +
errors
.map((err) => {
const fName = short ? shortFileName : fullFileName;
let text = `<yellow> - ${fName}:${err.line}:${err.char}</yellow><dim> (${err.category}</dim><dim> ${err.code})</dim><dim> ${err.message}</dim>`;
return text;
})
.join(interfaces_1.END_LINE));
});
const name = options.name;
// print if any
if (allErrors.length > 0) {
// insert header
logger_1.Logger.echo('');
logger_1.Logger.info(`<white><bold><bgRed> ERROR </bgRed></bold></white> <red>Typechecker inspection - (${name ? name : 'no-name'}):</red>`, `<gray>${totalsErrors} errors.<gray>`);
logger_1.Logger.echo('');
logger_1.Logger.echo(allErrors.join(interfaces_1.END_LINE));
}
else {
logger_1.Logger.echo('');
logger_1.Logger.info(`<white><bold><bgGreen> SUCCESS </bgGreen></bold></white> <green>Typechecker inspection - (${name ? name : 'no-name'}):<green>`, `<green>No Errors found</green>`);
logger_1.Logger.echo('');
}
// print option errors
if (errors.optionsErrors.length) {
logger_1.Logger.info(`\n <cyan><bold><underline>Option errors:</underline></bold></cyan>`, `<grey>${errors.optionsErrors.length} errors.</grey>`);
let optionErrorsText = Object.entries(errors.optionsErrors).map(([no, err]) => {
let messageText = err.messageText;
if (typeof messageText === 'object' && messageText !== null) {
messageText = JSON.stringify(messageText);
}
let text = `<yellow> - tsConfig: </yellow><yellow>(${err.category}:</yellow><yellow>${err.code})</yellow><dim> ${messageText}</dim>`;
return text;
});
logger_1.Logger.echo(optionErrorsText.join('\n'));
}
// todo: this needs testing, how do I create a global error??
try {
if (errors.globalErrors.length) {
logger_1.Logger.info(`\n <red><bold><underline>Option errors:</underline></bold></red>`, `<grey>${errors.globalErrors.length} errors.</grey>`);
let globalErrorsText = Object.entries(errors.globalErrors).map(([no, err]) => {
let messageText = err.messageText;
if (typeof messageText === 'object' && messageText !== null) {
messageText = JSON.stringify(messageText);
}
let text = `<yellow> - tsConfig: </yellow><yellow>(${err.category}:</yellow><yellow>${err.code})</yellow><dim> ${messageText}</dim>`;
return text;
});
logger_1.Logger.echo(globalErrorsText.join('\n'));
}
}
catch (err) {
console.log(`Global error`, err);
}
// if errors, show user
if (options.print_summary) {
if (totalsErrors) {
// write header
logger_1.Logger.info(`\n <underline>Error Summary:</underline>`, `<grey> - ${totalsErrors} errors.</grey>`);
logger_1.Logger.echo(` <${optionsErrors ? 'red' : 'dim'}>- Options: ${optionsErrors}\n</${optionsErrors ? 'red' : 'dim'}> <${semanticErrors ? 'red' : 'dim'}>- Options: ${semanticErrors}\n</${semanticErrors ? 'red' : 'dim'}> <${syntacticErrors ? 'red' : 'dim'}>- Options: ${syntacticErrors}\n</${syntacticErrors ? 'red' : 'dim'}> <${globalErrors ? 'red' : 'dim'}>- Options: ${globalErrors}\n</${globalErrors ? 'red' : 'dim'}>`);
}
}
if (options.print_runtime) {
logger_1.Logger.info(`Typechecker inspection time:`, `<dim>${errors.elapsedInspectionTime}ms</dim>`);
}
return totalsErrors;
}
exports.printResult = printResult;
//# sourceMappingURL=printResult.js.map
;