UNPKG

tdd-guard

Version:

TDD Guard enforces Test-Driven Development principles using Claude Code hooks

61 lines (60 loc) 1.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ESLint = void 0; const child_process_1 = require("child_process"); const util_1 = require("util"); const execFileAsync = (0, util_1.promisify)(child_process_1.execFile); class ESLint { async lint(filePaths, configPath) { const timestamp = new Date().toISOString(); const args = buildArgs(filePaths, configPath); try { await execFileAsync('npx', args); return createLintData(timestamp, filePaths, []); } catch (error) { if (!isExecError(error)) throw error; const results = parseResults(error.stdout); return createLintData(timestamp, filePaths, results); } } } exports.ESLint = ESLint; // Helper functions const buildArgs = (files, configPath) => { const args = ['eslint', ...files, '--format', 'json']; if (configPath) { args.push('-c', configPath); } return args; }; const isExecError = (error) => error !== null && typeof error === 'object' && 'stdout' in error; const parseResults = (stdout) => { try { return JSON.parse(stdout ?? '[]'); } catch { return []; } }; const createLintData = (timestamp, files, results) => { const issues = extractIssues(results); return { timestamp, files, issues, errorCount: countBySeverity(issues, 'error'), warningCount: countBySeverity(issues, 'warning'), }; }; const extractIssues = (results) => results.flatMap((file) => (file.messages ?? []).map(toIssue(file.filePath))); const toIssue = (filePath) => (msg) => ({ file: filePath, line: msg.line ?? 0, column: msg.column ?? 0, severity: (msg.severity === 2 ? 'error' : 'warning'), message: msg.message, rule: msg.ruleId, }); const countBySeverity = (issues, severity) => issues.filter((i) => i.severity === severity).length;