UNPKG

env-sentinel

Version:

Zero-dependency tool that auto-validates .env files against schema.env, with optional fallback and secure warnings.

50 lines (49 loc) 2.1 kB
export class ErrorFormatter { static formatIssue(issue, context = {}) { const parts = []; if (context.filePath) { const lineNumber = context.lineNumber || issue.line; const lineInfo = lineNumber ? `:${lineNumber}` : ''; parts.push(`${context.filePath}${lineInfo}`); } const severity = issue.severity || 'error'; const rule = issue.rule || 'unknown'; parts.push(`[${severity}] ${rule}`); const message = this.formatMessage(issue, context); parts.push(`→ ${message}`); return parts.join(' '); } static formatMessage(issue, context) { let message = issue.message; if (issue.key && !message.includes(issue.key)) { message = `${issue.key}: ${message}`; } if (context.actualValue && context.expectedValue) { message += ` (expected: ${context.expectedValue}, got: ${context.actualValue})`; } else if (context.actualValue) { message += ` (got: ${context.actualValue})`; } else if (issue.value) { message += ` (value: ${issue.value})`; } return message; } static formatIssues(issues, context = {}) { return issues.map(issue => this.formatIssue(issue, context)); } static formatSummary(issues, context = {}) { const errorCount = issues.filter(i => i.severity === 'error').length; const warningCount = issues.filter(i => i.severity === 'warning').length; const noticeCount = issues.filter(i => i.severity === 'notice').length; const parts = []; if (errorCount > 0) parts.push(`${errorCount} error${errorCount !== 1 ? 's' : ''}`); if (warningCount > 0) parts.push(`${warningCount} warning${warningCount !== 1 ? 's' : ''}`); if (noticeCount > 0) parts.push(`${noticeCount} notice${noticeCount !== 1 ? 's' : ''}`); const summary = parts.join(', '); return context.filePath ? `${context.filePath}: ${summary}` : summary; } }