UNPKG

vuln-reporter

Version:

通用型漏洞掃描與報告工具 - 用於解析 Trivy 掃描結果、生成 Excel 報告並發送 Teams 通知的 CLI 工具

64 lines 2.07 kB
import { TrivyParser } from './trivy-parser.js'; export class ParserRegistry { parsers = new Map(); constructor() { // 註冊預設的解析器 this.registerParser('trivy', new TrivyParser()); } registerParser(scannerType, parser) { this.parsers.set(scannerType, parser); } getParser(scannerType) { return this.parsers.get(scannerType); } /** * 根據報告內容自動偵測適合的解析器 */ detectParser(reportData) { // 檢測 Trivy 格式 if (this.isTrivyFormat(reportData)) { return { parser: this.parsers.get('trivy'), scannerType: 'trivy', }; } // 未來可以加入其他格式的檢測邏輯 // if (this.isNpmAuditFormat(reportData)) { // return { // parser: this.parsers.get('npm-audit')!, // scannerType: 'npm-audit' // }; // } throw new Error('無法識別報告格式,請檢查輸入檔案是否為支援的掃描工具格式'); } /** * 檢測是否為 Trivy 格式 */ isTrivyFormat(data) { return (typeof data === 'object' && data !== null && 'SchemaVersion' in data && 'Results' in data && Array.isArray(data.Results) && ('CreatedAt' in data || data.Results.length === 0 || // 允許空的 Results 陣列 data.Results.some((result) => result && 'Target' in result && 'Class' in result && 'Type' in result))); } /** * 檢測是否為 NPM Audit 格式 (範例) */ isNpmAuditFormat(data) { return (typeof data === 'object' && data !== null && 'advisories' in data && 'metadata' in data && typeof data.advisories === 'object'); } /** * 列出所有已註冊的解析器 */ listAvailableParsers() { return Array.from(this.parsers.keys()); } } //# sourceMappingURL=parser-registry.js.map