avana-cli 2.11.0

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.
Files changed (100) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE +21 -0
  3. package/README.md +584 -0
  4. package/dist/cli.d.ts +7 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +153 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/install.d.ts +6 -0
  9. package/dist/commands/install.d.ts.map +1 -0
  10. package/dist/commands/install.js +101 -0
  11. package/dist/commands/install.js.map +1 -0
  12. package/dist/commands/scan.d.ts +19 -0
  13. package/dist/commands/scan.d.ts.map +1 -0
  14. package/dist/commands/scan.js +383 -0
  15. package/dist/commands/scan.js.map +1 -0
  16. package/dist/commands/uninstall.d.ts +6 -0
  17. package/dist/commands/uninstall.d.ts.map +1 -0
  18. package/dist/commands/uninstall.js +80 -0
  19. package/dist/commands/uninstall.js.map +1 -0
  20. package/dist/index.d.ts +97 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +475 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/rules/additional-patterns.d.ts +12 -0
  25. package/dist/rules/additional-patterns.d.ts.map +1 -0
  26. package/dist/rules/additional-patterns.js +170 -0
  27. package/dist/rules/additional-patterns.js.map +1 -0
  28. package/dist/rules/code-patterns.d.ts +26 -0
  29. package/dist/rules/code-patterns.d.ts.map +1 -0
  30. package/dist/rules/code-patterns.js +220 -0
  31. package/dist/rules/code-patterns.js.map +1 -0
  32. package/dist/rules/secret-patterns.d.ts +28 -0
  33. package/dist/rules/secret-patterns.d.ts.map +1 -0
  34. package/dist/rules/secret-patterns.js +1729 -0
  35. package/dist/rules/secret-patterns.js.map +1 -0
  36. package/dist/scanners/secret-scanner.d.ts +34 -0
  37. package/dist/scanners/secret-scanner.d.ts.map +1 -0
  38. package/dist/scanners/secret-scanner.js +281 -0
  39. package/dist/scanners/secret-scanner.js.map +1 -0
  40. package/dist/types/index.d.ts +116 -0
  41. package/dist/types/index.d.ts.map +1 -0
  42. package/dist/types/index.js +7 -0
  43. package/dist/types/index.js.map +1 -0
  44. package/dist/utils/error-handler.d.ts +126 -0
  45. package/dist/utils/error-handler.d.ts.map +1 -0
  46. package/dist/utils/error-handler.js +222 -0
  47. package/dist/utils/error-handler.js.map +1 -0
  48. package/dist/utils/exit-codes.d.ts +52 -0
  49. package/dist/utils/exit-codes.d.ts.map +1 -0
  50. package/dist/utils/exit-codes.js +89 -0
  51. package/dist/utils/exit-codes.js.map +1 -0
  52. package/dist/utils/file-stream-scanner.d.ts +31 -0
  53. package/dist/utils/file-stream-scanner.d.ts.map +1 -0
  54. package/dist/utils/file-stream-scanner.js +159 -0
  55. package/dist/utils/file-stream-scanner.js.map +1 -0
  56. package/dist/utils/file-type-detector.d.ts +45 -0
  57. package/dist/utils/file-type-detector.d.ts.map +1 -0
  58. package/dist/utils/file-type-detector.js +237 -0
  59. package/dist/utils/file-type-detector.js.map +1 -0
  60. package/dist/utils/ignore-pattern-manager.d.ts +61 -0
  61. package/dist/utils/ignore-pattern-manager.d.ts.map +1 -0
  62. package/dist/utils/ignore-pattern-manager.js +204 -0
  63. package/dist/utils/ignore-pattern-manager.js.map +1 -0
  64. package/dist/utils/json-output-formatter.d.ts +232 -0
  65. package/dist/utils/json-output-formatter.d.ts.map +1 -0
  66. package/dist/utils/json-output-formatter.js +367 -0
  67. package/dist/utils/json-output-formatter.js.map +1 -0
  68. package/dist/utils/logger.d.ts +181 -0
  69. package/dist/utils/logger.d.ts.map +1 -0
  70. package/dist/utils/logger.js +414 -0
  71. package/dist/utils/logger.js.map +1 -0
  72. package/dist/utils/markdown-output-formatter.d.ts +65 -0
  73. package/dist/utils/markdown-output-formatter.d.ts.map +1 -0
  74. package/dist/utils/markdown-output-formatter.js +316 -0
  75. package/dist/utils/markdown-output-formatter.js.map +1 -0
  76. package/dist/utils/memory-manager.d.ts +77 -0
  77. package/dist/utils/memory-manager.d.ts.map +1 -0
  78. package/dist/utils/memory-manager.js +157 -0
  79. package/dist/utils/memory-manager.js.map +1 -0
  80. package/dist/utils/parallel-scanner-worker.d.ts +19 -0
  81. package/dist/utils/parallel-scanner-worker.d.ts.map +1 -0
  82. package/dist/utils/parallel-scanner-worker.js +51 -0
  83. package/dist/utils/parallel-scanner-worker.js.map +1 -0
  84. package/dist/utils/parallel-scanner.d.ts +82 -0
  85. package/dist/utils/parallel-scanner.d.ts.map +1 -0
  86. package/dist/utils/parallel-scanner.js +229 -0
  87. package/dist/utils/parallel-scanner.js.map +1 -0
  88. package/dist/utils/pattern-validator.d.ts +108 -0
  89. package/dist/utils/pattern-validator.d.ts.map +1 -0
  90. package/dist/utils/pattern-validator.js +315 -0
  91. package/dist/utils/pattern-validator.js.map +1 -0
  92. package/dist/utils/progress-reporter.d.ts +68 -0
  93. package/dist/utils/progress-reporter.d.ts.map +1 -0
  94. package/dist/utils/progress-reporter.js +194 -0
  95. package/dist/utils/progress-reporter.js.map +1 -0
  96. package/dist/utils/result-cache.d.ts +99 -0
  97. package/dist/utils/result-cache.d.ts.map +1 -0
  98. package/dist/utils/result-cache.js +335 -0
  99. package/dist/utils/result-cache.js.map +1 -0
  100. package/package.json +80 -0
@@ -0,0 +1,232 @@
1
+ /**
2
+ * JSON Output Formatter
3
+ * Production-ready JSON formatter for CI/CD integration
4
+ */
5
+ /**
6
+ * Security issue severity levels
7
+ */
8
+ export declare enum Severity {
9
+ LOW = "low",
10
+ MEDIUM = "medium",
11
+ HIGH = "high",
12
+ CRITICAL = "critical"
13
+ }
14
+ /**
15
+ * Security issue interface
16
+ */
17
+ export interface SecurityIssue {
18
+ id: string;
19
+ type: string;
20
+ severity: Severity;
21
+ message: string;
22
+ filePath: string;
23
+ lineNumber: number;
24
+ columnNumber?: number;
25
+ match: string;
26
+ context?: string;
27
+ confidence: number;
28
+ ruleId: string;
29
+ ruleName: string;
30
+ }
31
+ /**
32
+ * Issue summary statistics
33
+ */
34
+ export interface IssueSummary {
35
+ total: number;
36
+ critical: number;
37
+ high: number;
38
+ medium: number;
39
+ low: number;
40
+ byType: Record<string, number>;
41
+ byFile: Record<string, number>;
42
+ }
43
+ /**
44
+ * Scan metadata
45
+ */
46
+ export interface ScanMetadata {
47
+ avanaVersion: string;
48
+ scanId: string;
49
+ startTime: string;
50
+ endTime: string;
51
+ duration: number;
52
+ filesScanned: number;
53
+ filesSkipped: number;
54
+ filesIgnored: number;
55
+ totalFiles: number;
56
+ scanOptions: ScanOptions;
57
+ environment: EnvironmentInfo;
58
+ }
59
+ /**
60
+ * Scan options used
61
+ */
62
+ export interface ScanOptions {
63
+ verbose: boolean;
64
+ debug: boolean;
65
+ quiet: boolean;
66
+ patterns: string[];
67
+ ignorePatterns: string[];
68
+ maxFileSize: number;
69
+ parallel: boolean;
70
+ workerCount?: number;
71
+ }
72
+ /**
73
+ * Environment information
74
+ */
75
+ export interface EnvironmentInfo {
76
+ nodeVersion: string;
77
+ platform: string;
78
+ arch: string;
79
+ cwd: string;
80
+ user?: string;
81
+ ci?: boolean;
82
+ ciProvider?: string;
83
+ }
84
+ /**
85
+ * Debug information
86
+ */
87
+ export interface DebugInfo {
88
+ memoryUsage: {
89
+ rss: number;
90
+ heapUsed: number;
91
+ heapTotal: number;
92
+ external: number;
93
+ };
94
+ performanceMetrics: {
95
+ avgFileProcessingTime: number;
96
+ slowestFile: {
97
+ path: string;
98
+ duration: number;
99
+ };
100
+ fastestFile: {
101
+ path: string;
102
+ duration: number;
103
+ };
104
+ patternMatchingTime: number;
105
+ fileReadingTime: number;
106
+ };
107
+ cacheStats?: {
108
+ hitRate: number;
109
+ totalRequests: number;
110
+ cacheHits: number;
111
+ cacheMisses: number;
112
+ };
113
+ errorStats: {
114
+ totalErrors: number;
115
+ errorsByType: Record<string, number>;
116
+ };
117
+ }
118
+ /**
119
+ * Complete scan result
120
+ */
121
+ export interface ScanResult {
122
+ success: boolean;
123
+ issues: SecurityIssue[];
124
+ summary: IssueSummary;
125
+ securityScore: number;
126
+ metadata: ScanMetadata;
127
+ debug?: DebugInfo;
128
+ }
129
+ /**
130
+ * JSON formatting options
131
+ */
132
+ export interface JSONOptions {
133
+ pretty: boolean;
134
+ includeMetadata: boolean;
135
+ includeDebugInfo: boolean;
136
+ includeContext: boolean;
137
+ sortIssues: boolean;
138
+ sortBy: 'severity' | 'file' | 'line' | 'type';
139
+ }
140
+ /**
141
+ * JSON output structure
142
+ */
143
+ export interface JSONScanResult {
144
+ success: boolean;
145
+ timestamp: string;
146
+ duration: number;
147
+ filesScanned: number;
148
+ securityScore: number;
149
+ issues: JSONSecurityIssue[];
150
+ summary: IssueSummary;
151
+ metadata?: ScanMetadata;
152
+ debug?: DebugInfo;
153
+ }
154
+ /**
155
+ * JSON security issue (optimized for CI/CD)
156
+ */
157
+ export interface JSONSecurityIssue {
158
+ id: string;
159
+ type: string;
160
+ severity: Severity;
161
+ message: string;
162
+ file: string;
163
+ line: number;
164
+ column?: number;
165
+ match: string;
166
+ context?: string;
167
+ confidence: number;
168
+ rule: {
169
+ id: string;
170
+ name: string;
171
+ };
172
+ }
173
+ /**
174
+ * Production-ready JSON Output Formatter
175
+ * Formats scan results as structured JSON for CI/CD integration
176
+ */
177
+ export declare class JSONOutputFormatter {
178
+ private readonly version;
179
+ constructor(version?: string);
180
+ /**
181
+ * Format scan result as JSON string
182
+ */
183
+ format(result: ScanResult, options?: Partial<JSONOptions>): string;
184
+ /**
185
+ * Build the JSON result object
186
+ */
187
+ private buildJSONResult;
188
+ /**
189
+ * Format security issues for JSON output
190
+ */
191
+ private formatIssues;
192
+ /**
193
+ * Format a single security issue
194
+ */
195
+ private formatIssue;
196
+ /**
197
+ * Sort issues by specified criteria
198
+ */
199
+ private sortIssues;
200
+ /**
201
+ * Format issue summary
202
+ */
203
+ private formatSummary;
204
+ /**
205
+ * Format metadata for JSON output
206
+ */
207
+ private formatMetadata;
208
+ /**
209
+ * Format debug information
210
+ */
211
+ private formatDebugInfo;
212
+ /**
213
+ * Create error fallback JSON when formatting fails
214
+ */
215
+ private formatErrorFallback;
216
+ /**
217
+ * Validate JSON output structure
218
+ */
219
+ validate(jsonString: string): {
220
+ isValid: boolean;
221
+ errors: string[];
222
+ };
223
+ /**
224
+ * Create a minimal JSON result for testing
225
+ */
226
+ static createMinimalResult(): JSONScanResult;
227
+ /**
228
+ * Get JSON schema for validation
229
+ */
230
+ getSchema(): object;
231
+ }
232
+ //# sourceMappingURL=json-output-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-output-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/json-output-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,367 @@
1
+ "use strict";
2
+ /**
3
+ * JSON Output Formatter
4
+ * Production-ready JSON formatter for CI/CD integration
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.JSONOutputFormatter = exports.Severity = void 0;
8
+ /**
9
+ * Security issue severity levels
10
+ */
11
+ var Severity;
12
+ (function (Severity) {
13
+ Severity["LOW"] = "low";
14
+ Severity["MEDIUM"] = "medium";
15
+ Severity["HIGH"] = "high";
16
+ Severity["CRITICAL"] = "critical";
17
+ })(Severity || (exports.Severity = Severity = {}));
18
+ /**
19
+ * Production-ready JSON Output Formatter
20
+ * Formats scan results as structured JSON for CI/CD integration
21
+ */
22
+ class JSONOutputFormatter {
23
+ version;
24
+ constructor(version = '1.0.0') {
25
+ this.version = version;
26
+ }
27
+ /**
28
+ * Format scan result as JSON string
29
+ */
30
+ format(result, options = {}) {
31
+ const opts = {
32
+ pretty: false,
33
+ includeMetadata: true,
34
+ includeDebugInfo: false,
35
+ includeContext: true,
36
+ sortIssues: true,
37
+ sortBy: 'severity',
38
+ ...options
39
+ };
40
+ try {
41
+ const jsonResult = this.buildJSONResult(result, opts);
42
+ if (opts.pretty) {
43
+ return JSON.stringify(jsonResult, null, 2);
44
+ }
45
+ else {
46
+ return JSON.stringify(jsonResult);
47
+ }
48
+ }
49
+ catch (error) {
50
+ // Fallback to minimal JSON on formatting error
51
+ return this.formatErrorFallback(error, result);
52
+ }
53
+ }
54
+ /**
55
+ * Build the JSON result object
56
+ */
57
+ buildJSONResult(result, options) {
58
+ const issues = this.formatIssues(result.issues, options);
59
+ const jsonResult = {
60
+ success: result.success,
61
+ timestamp: result.metadata.endTime,
62
+ duration: result.metadata.duration,
63
+ filesScanned: result.metadata.filesScanned,
64
+ securityScore: result.securityScore,
65
+ issues,
66
+ summary: this.formatSummary(result.summary)
67
+ };
68
+ // Add metadata if requested
69
+ if (options.includeMetadata) {
70
+ jsonResult.metadata = this.formatMetadata(result.metadata);
71
+ }
72
+ // Add debug info if requested and available
73
+ if (options.includeDebugInfo && result.debug) {
74
+ jsonResult.debug = this.formatDebugInfo(result.debug);
75
+ }
76
+ return jsonResult;
77
+ }
78
+ /**
79
+ * Format security issues for JSON output
80
+ */
81
+ formatIssues(issues, options) {
82
+ let formattedIssues = issues.map(issue => this.formatIssue(issue, options));
83
+ // Sort issues if requested
84
+ if (options.sortIssues) {
85
+ formattedIssues = this.sortIssues(formattedIssues, options.sortBy);
86
+ }
87
+ return formattedIssues;
88
+ }
89
+ /**
90
+ * Format a single security issue
91
+ */
92
+ formatIssue(issue, options) {
93
+ const jsonIssue = {
94
+ id: issue.id,
95
+ type: issue.type,
96
+ severity: issue.severity,
97
+ message: issue.message,
98
+ file: issue.filePath,
99
+ line: issue.lineNumber,
100
+ match: issue.match,
101
+ confidence: issue.confidence,
102
+ rule: {
103
+ id: issue.ruleId,
104
+ name: issue.ruleName
105
+ }
106
+ };
107
+ // Add optional fields
108
+ if (issue.columnNumber !== undefined) {
109
+ jsonIssue.column = issue.columnNumber;
110
+ }
111
+ if (options.includeContext && issue.context) {
112
+ jsonIssue.context = issue.context;
113
+ }
114
+ return jsonIssue;
115
+ }
116
+ /**
117
+ * Sort issues by specified criteria
118
+ */
119
+ sortIssues(issues, sortBy) {
120
+ const severityOrder = {
121
+ [Severity.CRITICAL]: 0,
122
+ [Severity.HIGH]: 1,
123
+ [Severity.MEDIUM]: 2,
124
+ [Severity.LOW]: 3
125
+ };
126
+ return issues.sort((a, b) => {
127
+ switch (sortBy) {
128
+ case 'severity':
129
+ const severityDiff = severityOrder[a.severity] - severityOrder[b.severity];
130
+ if (severityDiff !== 0)
131
+ return severityDiff;
132
+ // Secondary sort by file
133
+ return a.file.localeCompare(b.file);
134
+ case 'file':
135
+ const fileDiff = a.file.localeCompare(b.file);
136
+ if (fileDiff !== 0)
137
+ return fileDiff;
138
+ // Secondary sort by line number
139
+ return a.line - b.line;
140
+ case 'line':
141
+ const lineDiff = a.line - b.line;
142
+ if (lineDiff !== 0)
143
+ return lineDiff;
144
+ // Secondary sort by file
145
+ return a.file.localeCompare(b.file);
146
+ case 'type':
147
+ const typeDiff = a.type.localeCompare(b.type);
148
+ if (typeDiff !== 0)
149
+ return typeDiff;
150
+ // Secondary sort by severity
151
+ return severityOrder[a.severity] - severityOrder[b.severity];
152
+ default:
153
+ return 0;
154
+ }
155
+ });
156
+ }
157
+ /**
158
+ * Format issue summary
159
+ */
160
+ formatSummary(summary) {
161
+ // Return a clean copy to avoid mutations
162
+ return {
163
+ total: summary.total,
164
+ critical: summary.critical,
165
+ high: summary.high,
166
+ medium: summary.medium,
167
+ low: summary.low,
168
+ byType: { ...summary.byType },
169
+ byFile: { ...summary.byFile }
170
+ };
171
+ }
172
+ /**
173
+ * Format metadata for JSON output
174
+ */
175
+ formatMetadata(metadata) {
176
+ return {
177
+ avanaVersion: metadata.avanaVersion,
178
+ scanId: metadata.scanId,
179
+ startTime: metadata.startTime,
180
+ endTime: metadata.endTime,
181
+ duration: metadata.duration,
182
+ filesScanned: metadata.filesScanned,
183
+ filesSkipped: metadata.filesSkipped,
184
+ filesIgnored: metadata.filesIgnored,
185
+ totalFiles: metadata.totalFiles,
186
+ scanOptions: { ...metadata.scanOptions },
187
+ environment: { ...metadata.environment }
188
+ };
189
+ }
190
+ /**
191
+ * Format debug information
192
+ */
193
+ formatDebugInfo(debug) {
194
+ return {
195
+ memoryUsage: { ...debug.memoryUsage },
196
+ performanceMetrics: {
197
+ ...debug.performanceMetrics,
198
+ slowestFile: { ...debug.performanceMetrics.slowestFile },
199
+ fastestFile: { ...debug.performanceMetrics.fastestFile }
200
+ },
201
+ cacheStats: debug.cacheStats ? { ...debug.cacheStats } : undefined,
202
+ errorStats: {
203
+ totalErrors: debug.errorStats.totalErrors,
204
+ errorsByType: { ...debug.errorStats.errorsByType }
205
+ }
206
+ };
207
+ }
208
+ /**
209
+ * Create error fallback JSON when formatting fails
210
+ */
211
+ formatErrorFallback(error, result) {
212
+ const fallback = {
213
+ success: false,
214
+ timestamp: new Date().toISOString(),
215
+ duration: result.metadata?.duration || 0,
216
+ filesScanned: result.metadata?.filesScanned || 0,
217
+ securityScore: 0,
218
+ issues: [],
219
+ summary: {
220
+ total: 0,
221
+ critical: 0,
222
+ high: 0,
223
+ medium: 0,
224
+ low: 0,
225
+ byType: {},
226
+ byFile: {}
227
+ },
228
+ error: {
229
+ message: 'Failed to format JSON output',
230
+ details: error instanceof Error ? error.message : 'Unknown error'
231
+ }
232
+ };
233
+ return JSON.stringify(fallback);
234
+ }
235
+ /**
236
+ * Validate JSON output structure
237
+ */
238
+ validate(jsonString) {
239
+ const errors = [];
240
+ try {
241
+ const parsed = JSON.parse(jsonString);
242
+ // Check required fields
243
+ const requiredFields = ['success', 'timestamp', 'duration', 'filesScanned', 'securityScore', 'issues', 'summary'];
244
+ for (const field of requiredFields) {
245
+ if (!(field in parsed)) {
246
+ errors.push(`Missing required field: ${field}`);
247
+ }
248
+ }
249
+ // Validate issues array
250
+ if (Array.isArray(parsed.issues)) {
251
+ parsed.issues.forEach((issue, index) => {
252
+ const requiredIssueFields = ['id', 'type', 'severity', 'message', 'file', 'line', 'match', 'rule'];
253
+ for (const field of requiredIssueFields) {
254
+ if (!(field in issue)) {
255
+ errors.push(`Issue ${index}: Missing required field: ${field}`);
256
+ }
257
+ }
258
+ // Validate severity
259
+ if (issue.severity && !Object.values(Severity).includes(issue.severity)) {
260
+ errors.push(`Issue ${index}: Invalid severity: ${issue.severity}`);
261
+ }
262
+ });
263
+ }
264
+ else if (parsed.issues !== undefined) {
265
+ errors.push('Issues field must be an array');
266
+ }
267
+ // Validate summary
268
+ if (parsed.summary) {
269
+ const requiredSummaryFields = ['total', 'critical', 'high', 'medium', 'low'];
270
+ for (const field of requiredSummaryFields) {
271
+ if (typeof parsed.summary[field] !== 'number') {
272
+ errors.push(`Summary: ${field} must be a number`);
273
+ }
274
+ }
275
+ }
276
+ }
277
+ catch (parseError) {
278
+ errors.push(`Invalid JSON: ${parseError instanceof Error ? parseError.message : 'Parse error'}`);
279
+ }
280
+ return {
281
+ isValid: errors.length === 0,
282
+ errors
283
+ };
284
+ }
285
+ /**
286
+ * Create a minimal JSON result for testing
287
+ */
288
+ static createMinimalResult() {
289
+ return {
290
+ success: true,
291
+ timestamp: new Date().toISOString(),
292
+ duration: 1000,
293
+ filesScanned: 10,
294
+ securityScore: 85,
295
+ issues: [],
296
+ summary: {
297
+ total: 0,
298
+ critical: 0,
299
+ high: 0,
300
+ medium: 0,
301
+ low: 0,
302
+ byType: {},
303
+ byFile: {}
304
+ }
305
+ };
306
+ }
307
+ /**
308
+ * Get JSON schema for validation
309
+ */
310
+ getSchema() {
311
+ return {
312
+ type: 'object',
313
+ required: ['success', 'timestamp', 'duration', 'filesScanned', 'securityScore', 'issues', 'summary'],
314
+ properties: {
315
+ success: { type: 'boolean' },
316
+ timestamp: { type: 'string', format: 'date-time' },
317
+ duration: { type: 'number', minimum: 0 },
318
+ filesScanned: { type: 'integer', minimum: 0 },
319
+ securityScore: { type: 'number', minimum: 0, maximum: 100 },
320
+ issues: {
321
+ type: 'array',
322
+ items: {
323
+ type: 'object',
324
+ required: ['id', 'type', 'severity', 'message', 'file', 'line', 'match', 'rule'],
325
+ properties: {
326
+ id: { type: 'string' },
327
+ type: { type: 'string' },
328
+ severity: { enum: Object.values(Severity) },
329
+ message: { type: 'string' },
330
+ file: { type: 'string' },
331
+ line: { type: 'integer', minimum: 1 },
332
+ column: { type: 'integer', minimum: 1 },
333
+ match: { type: 'string' },
334
+ context: { type: 'string' },
335
+ confidence: { type: 'number', minimum: 0, maximum: 1 },
336
+ rule: {
337
+ type: 'object',
338
+ required: ['id', 'name'],
339
+ properties: {
340
+ id: { type: 'string' },
341
+ name: { type: 'string' }
342
+ }
343
+ }
344
+ }
345
+ }
346
+ },
347
+ summary: {
348
+ type: 'object',
349
+ required: ['total', 'critical', 'high', 'medium', 'low'],
350
+ properties: {
351
+ total: { type: 'integer', minimum: 0 },
352
+ critical: { type: 'integer', minimum: 0 },
353
+ high: { type: 'integer', minimum: 0 },
354
+ medium: { type: 'integer', minimum: 0 },
355
+ low: { type: 'integer', minimum: 0 },
356
+ byType: { type: 'object' },
357
+ byFile: { type: 'object' }
358
+ }
359
+ },
360
+ metadata: { type: 'object' },
361
+ debug: { type: 'object' }
362
+ }
363
+ };
364
+ }
365
+ }
366
+ exports.JSONOutputFormatter = JSONOutputFormatter;
367
+ //# sourceMappingURL=json-output-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-output-formatter.js","sourceRoot":"","sources":["../../src/utils/json-output-formatter.ts"],"names":[],"mappings":"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"}