71 lines
2.8 KiB
JavaScript
71 lines
2.8 KiB
JavaScript
import { bold, cyan, gray, red, yellow } from '../picocolors';
|
|
import path from 'path';
|
|
// eslint-disable-next-line no-shadow
|
|
export var MessageSeverity = /*#__PURE__*/ function(MessageSeverity) {
|
|
MessageSeverity[MessageSeverity["Warning"] = 1] = "Warning";
|
|
MessageSeverity[MessageSeverity["Error"] = 2] = "Error";
|
|
return MessageSeverity;
|
|
}({});
|
|
function pluginCount(messages) {
|
|
let nextPluginWarningCount = 0;
|
|
let nextPluginErrorCount = 0;
|
|
for(let i = 0; i < messages.length; i++){
|
|
const { severity, ruleId } = messages[i];
|
|
if (ruleId == null ? void 0 : ruleId.includes('@next/next')) {
|
|
if (severity === 1) {
|
|
nextPluginWarningCount += 1;
|
|
} else {
|
|
nextPluginErrorCount += 1;
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
nextPluginErrorCount,
|
|
nextPluginWarningCount
|
|
};
|
|
}
|
|
function formatMessage(dir, messages, filePath) {
|
|
let fileName = path.posix.normalize(path.relative(dir, filePath).replace(/\\/g, '/'));
|
|
if (!fileName.startsWith('.')) {
|
|
fileName = './' + fileName;
|
|
}
|
|
let output = '\n' + cyan(fileName);
|
|
for(let i = 0; i < messages.length; i++){
|
|
const { message, severity, line, column, ruleId } = messages[i];
|
|
output = output + '\n';
|
|
if (line && column) {
|
|
output = output + yellow(line.toString()) + ':' + yellow(column.toString()) + ' ';
|
|
}
|
|
if (severity === 1) {
|
|
output += yellow(bold('Warning')) + ': ';
|
|
} else {
|
|
output += red(bold('Error')) + ': ';
|
|
}
|
|
output += message;
|
|
if (ruleId) {
|
|
output += ' ' + gray(bold(ruleId));
|
|
}
|
|
}
|
|
return output;
|
|
}
|
|
export async function formatResults(baseDir, results, format) {
|
|
let totalNextPluginErrorCount = 0;
|
|
let totalNextPluginWarningCount = 0;
|
|
let resultsWithMessages = results.filter(({ messages })=>messages == null ? void 0 : messages.length);
|
|
// Track number of Next.js plugin errors and warnings
|
|
resultsWithMessages.forEach(({ messages })=>{
|
|
const res = pluginCount(messages);
|
|
totalNextPluginErrorCount += res.nextPluginErrorCount;
|
|
totalNextPluginWarningCount += res.nextPluginWarningCount;
|
|
});
|
|
// Use user defined formatter or Next.js's built-in custom formatter
|
|
const output = format ? await format(resultsWithMessages) : resultsWithMessages.map(({ messages, filePath })=>formatMessage(baseDir, messages, filePath)).join('\n');
|
|
return {
|
|
output: output,
|
|
outputWithMessages: resultsWithMessages.length > 0 ? output + `\n\n${cyan('info')} - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/app/api-reference/config/eslint#disabling-rules` : '',
|
|
totalNextPluginErrorCount,
|
|
totalNextPluginWarningCount
|
|
};
|
|
}
|
|
|
|
//# sourceMappingURL=customFormatter.js.map
|