import { addLog, ErrorLog, SuccessLog } from '@mintlify/previewing'; import { Text } from 'ink'; import path from 'path'; import { TerminateCode } from './accessibilityCheck.js'; import { checkMdxAccessibility, type AccessibilityFixAttribute } from './mdxAccessibility.js'; export const mdxLinter = async (): Promise => { try { addLog( Checking mdx files for accessibility issues... ); const results = await checkMdxAccessibility(); if (results.missingAltAttributes.length === 0) { addLog(); addLog( Checked {results.totalFiles} MDX files - all images and videos have alt attributes. ); return 0; } const issuesByFile: Record = {}; results.missingAltAttributes.forEach((issue) => { if (!issuesByFile[issue.filePath]) { issuesByFile[issue.filePath] = []; } issuesByFile[issue.filePath]?.push(issue); }); addLog( Found {results.missingAltAttributes.length} accessibility issues in{' '} {results.filesWithIssues} files: ); addLog(); for (const [filePath, issues] of Object.entries(issuesByFile)) { const relativePath = path.relative(process.cwd(), filePath); addLog({relativePath}:); for (const issue of issues) { const location = issue.line && issue.column ? ` (line ${issue.line}, col ${issue.column})` : ''; if (issue.element === 'a') { addLog( ✗ Missing text attribute {issue.tagName}{' '} element{location} ); } else { addLog( ✗ Missing alt attribute on {issue.tagName}{' '} element{location} ); } } addLog(); } addLog( Recommendation: Add alt attributes to all images and videos for better accessibility. ); return 1; } catch (error) { addLog( ); return 1; } };