pcu 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Security Command
3
+ *
4
+ * CLI command to perform security vulnerability scanning and automated fixes.
5
+ * Integrates with npm audit and snyk for comprehensive security analysis.
6
+ */
7
+ import { OutputFormatter, OutputFormat } from '../formatters/OutputFormatter.js';
8
+ export interface SecurityCommandOptions {
9
+ workspace?: string;
10
+ format?: OutputFormat;
11
+ audit?: boolean;
12
+ fixVulns?: boolean;
13
+ severity?: 'low' | 'moderate' | 'high' | 'critical';
14
+ includeDev?: boolean;
15
+ snyk?: boolean;
16
+ verbose?: boolean;
17
+ color?: boolean;
18
+ }
19
+ export interface SecurityReport {
20
+ summary: {
21
+ totalVulnerabilities: number;
22
+ critical: number;
23
+ high: number;
24
+ moderate: number;
25
+ low: number;
26
+ info: number;
27
+ };
28
+ vulnerabilities: Vulnerability[];
29
+ recommendations: SecurityRecommendation[];
30
+ metadata: {
31
+ scanDate: string;
32
+ scanTools: string[];
33
+ workspacePath: string;
34
+ };
35
+ }
36
+ export interface Vulnerability {
37
+ id: string;
38
+ package: string;
39
+ severity: 'low' | 'moderate' | 'high' | 'critical';
40
+ title: string;
41
+ url: string;
42
+ range: string;
43
+ fixAvailable: boolean | string;
44
+ fixVersion?: string;
45
+ paths: string[];
46
+ cwe?: string[];
47
+ cve?: string[];
48
+ }
49
+ export interface SecurityRecommendation {
50
+ package: string;
51
+ currentVersion: string;
52
+ recommendedVersion: string;
53
+ type: 'update' | 'remove' | 'replace';
54
+ reason: string;
55
+ impact: string;
56
+ }
57
+ export declare class SecurityCommand {
58
+ private readonly outputFormatter;
59
+ constructor(outputFormatter: OutputFormatter);
60
+ /**
61
+ * Execute the security command
62
+ */
63
+ execute(options?: SecurityCommandOptions): Promise<void>;
64
+ /**
65
+ * Perform comprehensive security scan
66
+ */
67
+ private performSecurityScan;
68
+ /**
69
+ * Run npm audit scan
70
+ */
71
+ private runNpmAudit;
72
+ /**
73
+ * Run snyk scan
74
+ */
75
+ private runSnykScan;
76
+ /**
77
+ * Parse npm audit results
78
+ */
79
+ private parseNpmAuditResults;
80
+ /**
81
+ * Parse snyk results
82
+ */
83
+ private parseSnykResults;
84
+ /**
85
+ * Generate security recommendations
86
+ */
87
+ private generateRecommendations;
88
+ /**
89
+ * Generate summary from vulnerabilities
90
+ */
91
+ private generateSummary;
92
+ /**
93
+ * Convert severity string to number for filtering
94
+ */
95
+ private severityToNumber;
96
+ /**
97
+ * Show security recommendations
98
+ */
99
+ private showRecommendations;
100
+ /**
101
+ * Auto-fix vulnerabilities
102
+ */
103
+ private autoFixVulnerabilities;
104
+ /**
105
+ * Validate command options
106
+ */
107
+ static validateOptions(options: SecurityCommandOptions): string[];
108
+ /**
109
+ * Get command help text
110
+ */
111
+ static getHelpText(): string;
112
+ }
113
+ //# sourceMappingURL=SecurityCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityCommand.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/SecurityCommand.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIjF,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE;QACP,oBAAoB,EAAE,MAAM,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,eAAe,EAAE,sBAAsB,EAAE,CAAC;IAC1C,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAE7D;;OAEG;IACG,OAAO,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DlE;;OAEG;YACW,mBAAmB;IA6CjC;;OAEG;YACW,WAAW;IAkCzB;;OAEG;YACW,WAAW;IA+BzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoC/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAqCvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;YACW,sBAAsB;IAuDpC;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,EAAE;IAgBjE;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM;CA+B7B"}
@@ -0,0 +1,412 @@
1
+ /**
2
+ * Security Command
3
+ *
4
+ * CLI command to perform security vulnerability scanning and automated fixes.
5
+ * Integrates with npm audit and snyk for comprehensive security analysis.
6
+ */
7
+ import { execSync } from 'child_process';
8
+ import * as fs from 'fs-extra';
9
+ import * as path from 'path';
10
+ import { EnhancedProgressBar } from '../formatters/ProgressBar.js';
11
+ import { StyledText, ThemeManager } from '../themes/ColorTheme.js';
12
+ export class SecurityCommand {
13
+ outputFormatter;
14
+ constructor(outputFormatter) {
15
+ this.outputFormatter = outputFormatter;
16
+ }
17
+ /**
18
+ * Execute the security command
19
+ */
20
+ async execute(options = {}) {
21
+ let progressBar;
22
+ try {
23
+ // Initialize theme
24
+ ThemeManager.setTheme('default');
25
+ // Show loading with progress bar
26
+ progressBar = new EnhancedProgressBar({
27
+ text: 'Performing security analysis...',
28
+ color: 'cyan',
29
+ spinner: 'dots',
30
+ });
31
+ progressBar.start();
32
+ if (options.verbose) {
33
+ console.log(StyledText.iconAnalysis('Security vulnerability scanning'));
34
+ console.log(StyledText.muted(`Workspace: ${options.workspace || process.cwd()}`));
35
+ console.log(StyledText.muted(`Severity filter: ${options.severity || 'all'}`));
36
+ console.log('');
37
+ }
38
+ // Execute security scan
39
+ const report = await this.performSecurityScan(options);
40
+ progressBar.succeed('Security analysis completed');
41
+ // Format and display results
42
+ const formattedOutput = this.outputFormatter.formatSecurityReport(report);
43
+ console.log(formattedOutput);
44
+ // Show recommendations if available
45
+ if (report.recommendations.length > 0) {
46
+ this.showRecommendations(report);
47
+ }
48
+ // Auto-fix vulnerabilities if requested
49
+ if (options.fixVulns) {
50
+ await this.autoFixVulnerabilities(report, options);
51
+ }
52
+ // Exit with appropriate code based on findings
53
+ const exitCode = report.summary.critical > 0 ? 1 : 0;
54
+ process.exit(exitCode);
55
+ }
56
+ catch (error) {
57
+ if (progressBar) {
58
+ progressBar.fail('Security analysis failed');
59
+ }
60
+ console.error(StyledText.iconError('Error performing security scan:'));
61
+ console.error(StyledText.error(String(error)));
62
+ if (options.verbose && error instanceof Error) {
63
+ console.error(StyledText.muted('Stack trace:'));
64
+ console.error(StyledText.muted(error.stack || 'No stack trace available'));
65
+ }
66
+ process.exit(1);
67
+ }
68
+ }
69
+ /**
70
+ * Perform comprehensive security scan
71
+ */
72
+ async performSecurityScan(options) {
73
+ const workspacePath = options.workspace || process.cwd();
74
+ const vulnerabilities = [];
75
+ const recommendations = [];
76
+ // Check if package.json exists
77
+ const packageJsonPath = path.join(workspacePath, 'package.json');
78
+ if (!(await fs.pathExists(packageJsonPath))) {
79
+ throw new Error(`No package.json found in ${workspacePath}`);
80
+ }
81
+ // Run npm audit
82
+ if (options.audit !== false) {
83
+ const npmVulns = await this.runNpmAudit(workspacePath, options);
84
+ vulnerabilities.push(...npmVulns);
85
+ }
86
+ // Run snyk scan if available
87
+ if (options.snyk) {
88
+ const snykVulns = await this.runSnykScan(workspacePath, options);
89
+ vulnerabilities.push(...snykVulns);
90
+ }
91
+ // Generate recommendations
92
+ recommendations.push(...this.generateRecommendations(vulnerabilities));
93
+ // Filter by severity if specified
94
+ const filteredVulnerabilities = options.severity
95
+ ? vulnerabilities.filter((v) => this.severityToNumber(v.severity) >= this.severityToNumber(options.severity))
96
+ : vulnerabilities;
97
+ return {
98
+ summary: this.generateSummary(filteredVulnerabilities),
99
+ vulnerabilities: filteredVulnerabilities,
100
+ recommendations: recommendations,
101
+ metadata: {
102
+ scanDate: new Date().toISOString(),
103
+ scanTools: ['npm-audit', ...(options.snyk ? ['snyk'] : [])],
104
+ workspacePath: workspacePath,
105
+ },
106
+ };
107
+ }
108
+ /**
109
+ * Run npm audit scan
110
+ */
111
+ async runNpmAudit(workspacePath, options) {
112
+ try {
113
+ const auditArgs = ['audit', '--json'];
114
+ if (!options.includeDev) {
115
+ auditArgs.push('--omit=dev');
116
+ }
117
+ const auditOutput = execSync(`npm ${auditArgs.join(' ')}`, {
118
+ cwd: workspacePath,
119
+ encoding: 'utf8',
120
+ stdio: ['pipe', 'pipe', 'pipe'],
121
+ });
122
+ const auditData = JSON.parse(auditOutput);
123
+ return this.parseNpmAuditResults(auditData);
124
+ }
125
+ catch (error) {
126
+ if (error.status === 1) {
127
+ // npm audit returns 1 when vulnerabilities are found
128
+ try {
129
+ const auditData = JSON.parse(error.stdout);
130
+ return this.parseNpmAuditResults(auditData);
131
+ }
132
+ catch (parseError) {
133
+ throw new Error(`Failed to parse npm audit output: ${error.message}`);
134
+ }
135
+ }
136
+ else {
137
+ throw new Error(`npm audit failed: ${error.message}`);
138
+ }
139
+ }
140
+ }
141
+ /**
142
+ * Run snyk scan
143
+ */
144
+ async runSnykScan(workspacePath, options) {
145
+ try {
146
+ // Check if snyk is installed
147
+ execSync('snyk --version', { stdio: 'pipe' });
148
+ const snykArgs = ['test', '--json'];
149
+ if (!options.includeDev) {
150
+ snykArgs.push('--dev');
151
+ }
152
+ const snykOutput = execSync(`snyk ${snykArgs.join(' ')}`, {
153
+ cwd: workspacePath,
154
+ encoding: 'utf8',
155
+ stdio: ['pipe', 'pipe', 'pipe'],
156
+ });
157
+ const snykData = JSON.parse(snykOutput);
158
+ return this.parseSnykResults(snykData);
159
+ }
160
+ catch (error) {
161
+ if (error.code === 'ENOENT') {
162
+ console.warn(StyledText.iconWarning('Snyk not found. Install with: npm install -g snyk'));
163
+ return [];
164
+ }
165
+ throw new Error(`Snyk scan failed: ${error.message}`);
166
+ }
167
+ }
168
+ /**
169
+ * Parse npm audit results
170
+ */
171
+ parseNpmAuditResults(auditData) {
172
+ const vulnerabilities = [];
173
+ if (!auditData.vulnerabilities) {
174
+ return vulnerabilities;
175
+ }
176
+ for (const [id, vuln] of Object.entries(auditData.vulnerabilities)) {
177
+ const vulnerability = vuln;
178
+ vulnerabilities.push({
179
+ id: id,
180
+ package: vulnerability.name,
181
+ severity: vulnerability.severity,
182
+ title: vulnerability.title || vulnerability.name,
183
+ url: vulnerability.url || `https://npmjs.com/advisories/${id}`,
184
+ range: vulnerability.range,
185
+ fixAvailable: vulnerability.fixAvailable,
186
+ fixVersion: vulnerability.fixAvailable === true ? vulnerability.fixAvailable : undefined,
187
+ paths: vulnerability.via?.map((v) => v.source || v.name) || [vulnerability.name],
188
+ cwe: vulnerability.cwe,
189
+ cve: vulnerability.cve,
190
+ });
191
+ }
192
+ return vulnerabilities;
193
+ }
194
+ /**
195
+ * Parse snyk results
196
+ */
197
+ parseSnykResults(snykData) {
198
+ const vulnerabilities = [];
199
+ if (!snykData.vulnerabilities) {
200
+ return vulnerabilities;
201
+ }
202
+ for (const vuln of snykData.vulnerabilities) {
203
+ vulnerabilities.push({
204
+ id: vuln.id,
205
+ package: vuln.packageName,
206
+ severity: vuln.severity,
207
+ title: vuln.title,
208
+ url: vuln.url,
209
+ range: vuln.semver?.vulnerable?.join(' || ') || vuln.version,
210
+ fixAvailable: vuln.fixedIn?.length > 0,
211
+ fixVersion: vuln.fixedIn?.[0],
212
+ paths: vuln.from || [vuln.packageName],
213
+ cwe: vuln.identifiers?.CWE || [],
214
+ cve: vuln.identifiers?.CVE || [],
215
+ });
216
+ }
217
+ return vulnerabilities;
218
+ }
219
+ /**
220
+ * Generate security recommendations
221
+ */
222
+ generateRecommendations(vulnerabilities) {
223
+ const recommendations = [];
224
+ const packages = new Set(vulnerabilities.map((v) => v.package));
225
+ for (const pkg of packages) {
226
+ const pkgVulns = vulnerabilities.filter((v) => v.package === pkg);
227
+ const criticalVulns = pkgVulns.filter((v) => v.severity === 'critical' || v.severity === 'high');
228
+ if (criticalVulns.length > 0) {
229
+ const fixVersions = [
230
+ ...new Set(criticalVulns.map((v) => v.fixVersion).filter((v) => v && typeof v === 'string')),
231
+ ];
232
+ if (fixVersions.length > 0) {
233
+ const currentVersion = pkgVulns[0]?.range?.split(' ')[0] || 'unknown';
234
+ const recommendedVersion = fixVersions[0] || 'unknown';
235
+ recommendations.push({
236
+ package: pkg,
237
+ currentVersion: currentVersion,
238
+ recommendedVersion: recommendedVersion,
239
+ type: 'update',
240
+ reason: `${criticalVulns.length} critical vulnerabilities found`,
241
+ impact: 'High - Security vulnerability fix',
242
+ });
243
+ }
244
+ }
245
+ }
246
+ return recommendations;
247
+ }
248
+ /**
249
+ * Generate summary from vulnerabilities
250
+ */
251
+ generateSummary(vulnerabilities) {
252
+ const summary = {
253
+ totalVulnerabilities: vulnerabilities.length,
254
+ critical: 0,
255
+ high: 0,
256
+ moderate: 0,
257
+ low: 0,
258
+ info: 0,
259
+ };
260
+ for (const vuln of vulnerabilities) {
261
+ const severity = vuln.severity;
262
+ switch (severity) {
263
+ case 'critical':
264
+ summary.critical++;
265
+ break;
266
+ case 'high':
267
+ summary.high++;
268
+ break;
269
+ case 'moderate':
270
+ summary.moderate++;
271
+ break;
272
+ case 'low':
273
+ summary.low++;
274
+ break;
275
+ case 'info':
276
+ summary.info++;
277
+ break;
278
+ default:
279
+ summary.info++;
280
+ break;
281
+ }
282
+ }
283
+ return summary;
284
+ }
285
+ /**
286
+ * Convert severity string to number for filtering
287
+ */
288
+ severityToNumber(severity) {
289
+ switch (severity) {
290
+ case 'critical':
291
+ return 4;
292
+ case 'high':
293
+ return 3;
294
+ case 'moderate':
295
+ return 2;
296
+ case 'low':
297
+ return 1;
298
+ case 'info':
299
+ return 0;
300
+ default:
301
+ return 0;
302
+ }
303
+ }
304
+ /**
305
+ * Show security recommendations
306
+ */
307
+ showRecommendations(report) {
308
+ if (report.recommendations.length === 0) {
309
+ return;
310
+ }
311
+ console.log('\n' + StyledText.iconInfo('Security Recommendations:'));
312
+ for (const rec of report.recommendations) {
313
+ console.log(` ${StyledText.iconWarning()} ${rec.package}: ${rec.currentVersion} → ${rec.recommendedVersion}`);
314
+ console.log(` ${StyledText.muted(rec.reason)}`);
315
+ console.log(` ${StyledText.muted(rec.impact)}`);
316
+ }
317
+ console.log('');
318
+ console.log(StyledText.iconUpdate('Run with --fix-vulns to apply automatic fixes'));
319
+ }
320
+ /**
321
+ * Auto-fix vulnerabilities
322
+ */
323
+ async autoFixVulnerabilities(report, options) {
324
+ if (report.recommendations.length === 0) {
325
+ console.log(StyledText.iconSuccess('No security fixes available'));
326
+ return;
327
+ }
328
+ console.log('\n' + StyledText.iconUpdate('Applying security fixes...'));
329
+ const workspacePath = options.workspace || process.cwd();
330
+ const fixableVulns = report.recommendations.filter((r) => r.type === 'update');
331
+ if (fixableVulns.length === 0) {
332
+ console.log(StyledText.iconInfo('No automatic fixes available'));
333
+ return;
334
+ }
335
+ try {
336
+ // Run npm audit fix
337
+ const fixArgs = ['audit', 'fix'];
338
+ if (!options.includeDev) {
339
+ fixArgs.push('--omit=dev');
340
+ }
341
+ execSync(`npm ${fixArgs.join(' ')}`, {
342
+ cwd: workspacePath,
343
+ encoding: 'utf8',
344
+ stdio: 'inherit',
345
+ });
346
+ console.log(StyledText.iconSuccess('Security fixes applied successfully'));
347
+ // Re-run scan to verify fixes
348
+ console.log(StyledText.iconInfo('Re-running security scan to verify fixes...'));
349
+ const newReport = await this.performSecurityScan({ ...options, fixVulns: false });
350
+ if (newReport.summary.critical === 0 && newReport.summary.high === 0) {
351
+ console.log(StyledText.iconSuccess('All critical and high severity vulnerabilities have been fixed!'));
352
+ }
353
+ else {
354
+ console.log(StyledText.iconWarning(`${newReport.summary.critical} critical and ${newReport.summary.high} high severity vulnerabilities remain`));
355
+ }
356
+ }
357
+ catch (error) {
358
+ console.error(StyledText.iconError('Failed to apply security fixes:'));
359
+ console.error(StyledText.error(error.message));
360
+ }
361
+ }
362
+ /**
363
+ * Validate command options
364
+ */
365
+ static validateOptions(options) {
366
+ const errors = [];
367
+ // Validate format
368
+ if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {
369
+ errors.push('Invalid format. Must be one of: table, json, yaml, minimal');
370
+ }
371
+ // Validate severity
372
+ if (options.severity && !['low', 'moderate', 'high', 'critical'].includes(options.severity)) {
373
+ errors.push('Invalid severity. Must be one of: low, moderate, high, critical');
374
+ }
375
+ return errors;
376
+ }
377
+ /**
378
+ * Get command help text
379
+ */
380
+ static getHelpText() {
381
+ return `
382
+ Security vulnerability scanning and automated fixes
383
+
384
+ Usage:
385
+ pcu security [options]
386
+
387
+ Options:
388
+ --workspace <path> Workspace directory (default: current directory)
389
+ --format <type> Output format: table, json, yaml, minimal (default: table)
390
+ --audit Perform npm audit scan (default: true)
391
+ --fix-vulns Automatically fix vulnerabilities
392
+ --severity <level> Filter by severity: low, moderate, high, critical
393
+ --include-dev Include dev dependencies in scan
394
+ --snyk Include Snyk scan (requires snyk CLI)
395
+ --verbose Show detailed information
396
+ --no-color Disable colored output
397
+
398
+ Examples:
399
+ pcu security # Basic security scan
400
+ pcu security --fix-vulns # Scan and fix vulnerabilities
401
+ pcu security --severity high # Show only high severity issues
402
+ pcu security --snyk # Include Snyk scan
403
+ pcu security --format json # Output as JSON
404
+
405
+ Exit Codes:
406
+ 0 No vulnerabilities found
407
+ 1 Vulnerabilities found
408
+ 2 Error occurred
409
+ `;
410
+ }
411
+ }
412
+ //# sourceMappingURL=SecurityCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/SecurityCommand.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { ImpactAnalysis, OutdatedReport, UpdateResult } from '../../application/services/CatalogUpdateService.js';
8
8
  import { WorkspaceStats, WorkspaceValidationReport } from '../../application/services/WorkspaceService.js';
9
+ import { SecurityReport } from '../commands/SecurityCommand.js';
9
10
  export type OutputFormat = 'table' | 'json' | 'yaml' | 'minimal';
10
11
  export declare class OutputFormatter {
11
12
  private readonly format;
@@ -31,6 +32,10 @@ export declare class OutputFormatter {
31
32
  * Format workspace statistics
32
33
  */
33
34
  formatWorkspaceStats(stats: WorkspaceStats): string;
35
+ /**
36
+ * Format security report
37
+ */
38
+ formatSecurityReport(report: SecurityReport): string;
34
39
  /**
35
40
  * Format simple message with optional styling
36
41
  */
@@ -75,6 +80,18 @@ export declare class OutputFormatter {
75
80
  * Format workspace statistics minimally
76
81
  */
77
82
  private formatStatsMinimal;
83
+ /**
84
+ * Format security report as table
85
+ */
86
+ private formatSecurityTable;
87
+ /**
88
+ * Format security report minimally
89
+ */
90
+ private formatSecurityMinimal;
91
+ /**
92
+ * Get color for severity level
93
+ */
94
+ private getSeverityColor;
78
95
  /**
79
96
  * Apply color if color is enabled
80
97
  */
@@ -1 +1 @@
1
- {"version":3,"file":"OutputFormatter.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/OutputFormatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,cAAc,EACd,cAAc,EACd,YAAY,EACb,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EACL,cAAc,EACd,yBAAyB,EAC1B,MAAM,gDAAgD,CAAC;AAMxD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAMjE,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,MAAM,GAAE,YAAsB,EAC9B,QAAQ,GAAE,OAAc;IAG3C;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAcpD;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAchD;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;IActD;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM;IAcjE;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM;IAcnD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAe,GAAG,MAAM;IAkB/F;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsD3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwD7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsEzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+C3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4EzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgD7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CA6E5B"}
1
+ {"version":3,"file":"OutputFormatter.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/OutputFormatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,cAAc,EACd,cAAc,EACd,YAAY,EACb,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EACL,cAAc,EACd,yBAAyB,EAC1B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAMhE,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAMjE,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,MAAM,GAAE,YAAsB,EAC9B,QAAQ,GAAE,OAAc;IAG3C;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAcpD;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAchD;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;IActD;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM;IAcjE;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM;IAcnD;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAcpD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAe,GAAG,MAAM;IAkB/F;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsD3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwD7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsEzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+C3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4EzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgD7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6E3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CA6E5B"}