UNPKG

fuse-box-typechecker

Version:

Fuse-Box type checker plugin for fusebox 4.0.0 ++

144 lines 7.45 kB
"use strict"; 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