From 8f9fed3ab2ad5a72958b47f303ce433e4ff9f11b Mon Sep 17 00:00:00 2001 From: Abdul Shaik Date: Wed, 25 Mar 2026 12:13:45 +0530 Subject: [PATCH] feat: support single-component report format in group-violations --- .../group-violations.tool.ts | 11 ++++++-- .../utils/format-converter.utils.ts | 26 ++++++++++++++++++- .../tools/ds/report-violations/utils/index.ts | 1 + 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/packages/angular-mcp-server/src/lib/tools/ds/report-violations/group-violations.tool.ts b/packages/angular-mcp-server/src/lib/tools/ds/report-violations/group-violations.tool.ts index 5f59030..09405b3 100644 --- a/packages/angular-mcp-server/src/lib/tools/ds/report-violations/group-violations.tool.ts +++ b/packages/angular-mcp-server/src/lib/tools/ds/report-violations/group-violations.tool.ts @@ -6,6 +6,7 @@ import { join } from 'path'; import type { AllViolationsReportByFile, AllViolationsReport, + ComponentViolationReport, GroupViolationsOptions, GroupViolationsReport, GroupViolationsResult, @@ -14,6 +15,7 @@ import { groupViolationsSchema } from './models/schema.js'; import { detectReportFormat, convertComponentToFileFormat, + convertSingleComponentToComponentFormat, enrichFiles, groupByDirectory, determineOptimalGroups, @@ -55,13 +57,18 @@ export const groupViolationsHandler = createHandler< if (format === 'unknown') { throw new Error( - 'Invalid violations report format. Expected either { files: [...] } or { components: [...] }', + 'Invalid violations report format. Expected { files: [...] }, { components: [...] }, or { component: "...", violations: [...] }', ); } let violationsData: AllViolationsReportByFile; - if (format === 'component') { + if (format === 'single-component') { + const asComponentFormat = convertSingleComponentToComponentFormat( + rawData as ComponentViolationReport, + ); + violationsData = convertComponentToFileFormat(asComponentFormat); + } else if (format === 'component') { violationsData = convertComponentToFileFormat( rawData as AllViolationsReport, ); diff --git a/packages/angular-mcp-server/src/lib/tools/ds/report-violations/utils/format-converter.utils.ts b/packages/angular-mcp-server/src/lib/tools/ds/report-violations/utils/format-converter.utils.ts index 95167ce..2c2a1a8 100644 --- a/packages/angular-mcp-server/src/lib/tools/ds/report-violations/utils/format-converter.utils.ts +++ b/packages/angular-mcp-server/src/lib/tools/ds/report-violations/utils/format-converter.utils.ts @@ -1,6 +1,7 @@ import type { AllViolationsReport, AllViolationsReportByFile, + ComponentViolationReport, FileViolationReport, } from '../models/types.js'; @@ -9,16 +10,39 @@ import type { */ export function detectReportFormat( data: any, -): 'file' | 'component' | 'unknown' { +): 'file' | 'component' | 'single-component' | 'unknown' { if (data.files && Array.isArray(data.files)) { return 'file'; } if (data.components && Array.isArray(data.components)) { return 'component'; } + if (data.component && data.violations && Array.isArray(data.violations)) { + return 'single-component'; + } return 'unknown'; } +/** + * Convert single-component report to multi-component format + */ +export function convertSingleComponentToComponentFormat( + report: ComponentViolationReport, +): AllViolationsReport { + return { + components: [ + { + component: report.component, + violations: report.violations.map((v) => ({ + ...v, + replacement: report.component, + })), + }, + ], + rootPath: report.rootPath, + }; +} + /** * Convert component-grouped report to file-grouped format */ diff --git a/packages/angular-mcp-server/src/lib/tools/ds/report-violations/utils/index.ts b/packages/angular-mcp-server/src/lib/tools/ds/report-violations/utils/index.ts index 9bf6c82..e69f7bf 100644 --- a/packages/angular-mcp-server/src/lib/tools/ds/report-violations/utils/index.ts +++ b/packages/angular-mcp-server/src/lib/tools/ds/report-violations/utils/index.ts @@ -11,6 +11,7 @@ export { export { detectReportFormat, convertComponentToFileFormat, + convertSingleComponentToComponentFormat, } from './format-converter.utils.js'; export { calculateViolations, enrichFiles } from './file-enrichment.utils.js'; export {