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,181 @@
1
+ /**
2
+ * Logger
3
+ * Production-ready logging system with verbosity levels
4
+ */
5
+ /**
6
+ * Log levels in order of verbosity
7
+ */
8
+ export declare enum LogLevel {
9
+ QUIET = 0,// Only critical errors and final results
10
+ NORMAL = 1,// Standard output
11
+ VERBOSE = 2,// Detailed information
12
+ DEBUG = 3
13
+ }
14
+ /**
15
+ * Log entry interface
16
+ */
17
+ export interface LogEntry {
18
+ timestamp: Date;
19
+ level: LogLevel;
20
+ category: string;
21
+ message: string;
22
+ data?: any;
23
+ }
24
+ /**
25
+ * Logger configuration
26
+ */
27
+ export interface LoggerConfig {
28
+ level: LogLevel;
29
+ enableTimestamps: boolean;
30
+ enableColors: boolean;
31
+ logToFile?: string;
32
+ maxLogFileSize?: number;
33
+ maxLogFiles?: number;
34
+ }
35
+ /**
36
+ * Production-ready Logger class
37
+ * Supports multiple verbosity levels, file logging, and structured output
38
+ */
39
+ export declare class Logger {
40
+ private config;
41
+ private logEntries;
42
+ private fileHandle?;
43
+ constructor(config?: Partial<LoggerConfig>);
44
+ /**
45
+ * Initialize file logging with rotation
46
+ */
47
+ private initializeFileLogging;
48
+ /**
49
+ * Rotate log file if it exceeds size limit
50
+ */
51
+ private rotateLogFileIfNeeded;
52
+ /**
53
+ * Rotate log files (keep maxLogFiles)
54
+ */
55
+ private rotateLogFiles;
56
+ /**
57
+ * Set log level
58
+ */
59
+ setLevel(level: LogLevel): void;
60
+ /**
61
+ * Get current log level
62
+ */
63
+ getLevel(): LogLevel;
64
+ /**
65
+ * Check if a log level should be output
66
+ */
67
+ private shouldLog;
68
+ /**
69
+ * Format timestamp
70
+ */
71
+ private formatTimestamp;
72
+ /**
73
+ * Apply color to text if colors are enabled
74
+ */
75
+ private colorize;
76
+ /**
77
+ * Get color for log level
78
+ */
79
+ private getLevelColor;
80
+ /**
81
+ * Get level name
82
+ */
83
+ private getLevelName;
84
+ /**
85
+ * Core logging method
86
+ */
87
+ private log;
88
+ /**
89
+ * Critical error logging (always shown)
90
+ */
91
+ error(category: string, message: string, data?: any): void;
92
+ /**
93
+ * Standard information logging
94
+ */
95
+ info(category: string, message: string, data?: any): void;
96
+ /**
97
+ * Success message logging
98
+ */
99
+ success(category: string, message: string, data?: any): void;
100
+ /**
101
+ * Warning message logging
102
+ */
103
+ warn(category: string, message: string, data?: any): void;
104
+ /**
105
+ * Verbose logging (--verbose flag)
106
+ */
107
+ verbose(category: string, message: string, data?: any): void;
108
+ /**
109
+ * Debug logging (--debug flag)
110
+ */
111
+ debug(category: string, message: string, data?: any): void;
112
+ /**
113
+ * Log file scanning activity
114
+ */
115
+ logFileScanning(filePath: string, action: 'scanning' | 'skipped' | 'ignored', reason?: string): void;
116
+ /**
117
+ * Log pattern checking activity
118
+ */
119
+ logPatternCheck(filePath: string, patternName: string, matched: boolean): void;
120
+ /**
121
+ * Log scan progress
122
+ */
123
+ logProgress(filesScanned: number, totalFiles: number, currentFile?: string): void;
124
+ /**
125
+ * Log scan summary
126
+ */
127
+ logSummary(summary: {
128
+ filesScanned: number;
129
+ issuesFound: number;
130
+ duration: number;
131
+ securityScore: number;
132
+ }): void;
133
+ /**
134
+ * Get all log entries
135
+ */
136
+ getLogEntries(): LogEntry[];
137
+ /**
138
+ * Get log entries by level
139
+ */
140
+ getLogEntriesByLevel(level: LogLevel): LogEntry[];
141
+ /**
142
+ * Clear log entries (keep file logging)
143
+ */
144
+ clearEntries(): void;
145
+ /**
146
+ * Get log statistics
147
+ */
148
+ getStats(): {
149
+ totalEntries: number;
150
+ entriesByLevel: Record<LogLevel, number>;
151
+ };
152
+ /**
153
+ * Close file handle and cleanup
154
+ */
155
+ close(): void;
156
+ /**
157
+ * Create logger from CLI flags
158
+ */
159
+ static fromFlags(flags: {
160
+ verbose?: boolean;
161
+ debug?: boolean;
162
+ quiet?: boolean;
163
+ logFile?: string;
164
+ }): Logger;
165
+ }
166
+ /**
167
+ * Default logger instance
168
+ */
169
+ export declare const logger: Logger;
170
+ /**
171
+ * Convenience functions for common logging patterns
172
+ */
173
+ export declare const log: {
174
+ error: (message: string, data?: any) => void;
175
+ info: (message: string, data?: any) => void;
176
+ success: (message: string, data?: any) => void;
177
+ warn: (message: string, data?: any) => void;
178
+ verbose: (message: string, data?: any) => void;
179
+ debug: (message: string, data?: any) => void;
180
+ };
181
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,oBAAY,QAAQ;IAClB,KAAK,IAAI,CAAK,yCAAyC;IACvD,MAAM,IAAI,CAAI,kBAAkB;IAChC,OAAO,IAAI,CAAG,uBAAuB;IACrC,KAAK,IAAI;CACV;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmBD;;;GAGG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAiB;gBAExB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAe9C;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACI,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAItC;;OAEG;IACI,QAAQ,IAAI,QAAQ;IAI3B;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAKhB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,GAAG;IAwCX;;OAEG;IACI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIjE;;OAEG;IACI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIhE;;OAEG;IACI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAInE;;OAEG;IACI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIhE;;OAEG;IACI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAInE;;OAEG;IACI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIjE;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAY3G;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAKrF;;OAEG;IACI,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IASxF;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,IAAI;IAMR;;OAEG;IACI,aAAa,IAAI,QAAQ,EAAE;IAIlC;;OAEG;IACI,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAIxD;;OAEG;IACI,YAAY,IAAI,IAAI;IAI3B;;OAEG;IACI,QAAQ,IAAI;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;KAC1C;IAkBD;;OAEG;IACI,KAAK,IAAI,IAAI;IAOpB;;OAEG;WACW,SAAS,CAAC,KAAK,EAAE;QAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,MAAM;CAiBX;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC;;GAEG;AACH,eAAO,MAAM,GAAG;qBACG,MAAM,SAAS,GAAG;oBACnB,MAAM,SAAS,GAAG;uBACf,MAAM,SAAS,GAAG;oBACrB,MAAM,SAAS,GAAG;uBACf,MAAM,SAAS,GAAG;qBACpB,MAAM,SAAS,GAAG;CACpC,CAAC"}
@@ -0,0 +1,414 @@
1
+ "use strict";
2
+ /**
3
+ * Logger
4
+ * Production-ready logging system with verbosity levels
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.log = exports.logger = exports.Logger = exports.LogLevel = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ /**
44
+ * Log levels in order of verbosity
45
+ */
46
+ var LogLevel;
47
+ (function (LogLevel) {
48
+ LogLevel[LogLevel["QUIET"] = 0] = "QUIET";
49
+ LogLevel[LogLevel["NORMAL"] = 1] = "NORMAL";
50
+ LogLevel[LogLevel["VERBOSE"] = 2] = "VERBOSE";
51
+ LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG"; // Maximum detail for debugging
52
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
53
+ /**
54
+ * ANSI color codes for terminal output
55
+ */
56
+ const Colors = {
57
+ RESET: '\x1b[0m',
58
+ BRIGHT: '\x1b[1m',
59
+ DIM: '\x1b[2m',
60
+ RED: '\x1b[31m',
61
+ GREEN: '\x1b[32m',
62
+ YELLOW: '\x1b[33m',
63
+ BLUE: '\x1b[34m',
64
+ MAGENTA: '\x1b[35m',
65
+ CYAN: '\x1b[36m',
66
+ WHITE: '\x1b[37m',
67
+ GRAY: '\x1b[90m'
68
+ };
69
+ /**
70
+ * Production-ready Logger class
71
+ * Supports multiple verbosity levels, file logging, and structured output
72
+ */
73
+ class Logger {
74
+ config;
75
+ logEntries = [];
76
+ fileHandle;
77
+ constructor(config = {}) {
78
+ this.config = {
79
+ level: LogLevel.NORMAL,
80
+ enableTimestamps: true,
81
+ enableColors: process.stdout.isTTY, // Auto-detect terminal support
82
+ maxLogFileSize: 10 * 1024 * 1024, // 10MB
83
+ maxLogFiles: 5,
84
+ ...config
85
+ };
86
+ if (this.config.logToFile) {
87
+ this.initializeFileLogging();
88
+ }
89
+ }
90
+ /**
91
+ * Initialize file logging with rotation
92
+ */
93
+ initializeFileLogging() {
94
+ if (!this.config.logToFile)
95
+ return;
96
+ try {
97
+ // Ensure log directory exists
98
+ const logDir = path.dirname(this.config.logToFile);
99
+ if (!fs.existsSync(logDir)) {
100
+ fs.mkdirSync(logDir, { recursive: true });
101
+ }
102
+ // Rotate log file if it's too large
103
+ this.rotateLogFileIfNeeded();
104
+ // Open file for appending (synchronously for tests)
105
+ this.fileHandle = fs.createWriteStream(this.config.logToFile, { flags: 'a' });
106
+ this.fileHandle.on('error', (error) => {
107
+ console.error(`Logger: Failed to write to log file: ${error.message}`);
108
+ this.fileHandle = undefined; // Disable file logging on error
109
+ });
110
+ }
111
+ catch (error) {
112
+ console.error(`Logger: Failed to initialize file logging: ${error instanceof Error ? error.message : 'Unknown error'}`);
113
+ }
114
+ }
115
+ /**
116
+ * Rotate log file if it exceeds size limit
117
+ */
118
+ rotateLogFileIfNeeded() {
119
+ if (!this.config.logToFile || !this.config.maxLogFileSize)
120
+ return;
121
+ try {
122
+ if (fs.existsSync(this.config.logToFile)) {
123
+ const stats = fs.statSync(this.config.logToFile);
124
+ if (stats.size >= this.config.maxLogFileSize) {
125
+ this.rotateLogFiles();
126
+ }
127
+ }
128
+ }
129
+ catch (error) {
130
+ // Ignore rotation errors, continue with logging
131
+ }
132
+ }
133
+ /**
134
+ * Rotate log files (keep maxLogFiles)
135
+ */
136
+ rotateLogFiles() {
137
+ if (!this.config.logToFile || !this.config.maxLogFiles)
138
+ return;
139
+ try {
140
+ const logFile = this.config.logToFile;
141
+ const maxFiles = this.config.maxLogFiles;
142
+ // Remove oldest log file
143
+ const oldestLog = `${logFile}.${maxFiles}`;
144
+ if (fs.existsSync(oldestLog)) {
145
+ fs.unlinkSync(oldestLog);
146
+ }
147
+ // Shift all log files
148
+ for (let i = maxFiles - 1; i >= 1; i--) {
149
+ const currentLog = i === 1 ? logFile : `${logFile}.${i}`;
150
+ const nextLog = `${logFile}.${i + 1}`;
151
+ if (fs.existsSync(currentLog)) {
152
+ fs.renameSync(currentLog, nextLog);
153
+ }
154
+ }
155
+ }
156
+ catch (error) {
157
+ // Ignore rotation errors, continue with logging
158
+ }
159
+ }
160
+ /**
161
+ * Set log level
162
+ */
163
+ setLevel(level) {
164
+ this.config.level = level;
165
+ }
166
+ /**
167
+ * Get current log level
168
+ */
169
+ getLevel() {
170
+ return this.config.level;
171
+ }
172
+ /**
173
+ * Check if a log level should be output
174
+ */
175
+ shouldLog(level) {
176
+ return level <= this.config.level;
177
+ }
178
+ /**
179
+ * Format timestamp
180
+ */
181
+ formatTimestamp() {
182
+ if (!this.config.enableTimestamps)
183
+ return '';
184
+ const now = new Date();
185
+ return `[${now.toISOString()}] `;
186
+ }
187
+ /**
188
+ * Apply color to text if colors are enabled
189
+ */
190
+ colorize(text, color) {
191
+ if (!this.config.enableColors)
192
+ return text;
193
+ return `${color}${text}${Colors.RESET}`;
194
+ }
195
+ /**
196
+ * Get color for log level
197
+ */
198
+ getLevelColor(level) {
199
+ switch (level) {
200
+ case LogLevel.QUIET: return Colors.RED;
201
+ case LogLevel.NORMAL: return Colors.WHITE;
202
+ case LogLevel.VERBOSE: return Colors.CYAN;
203
+ case LogLevel.DEBUG: return Colors.GRAY;
204
+ default: return Colors.WHITE;
205
+ }
206
+ }
207
+ /**
208
+ * Get level name
209
+ */
210
+ getLevelName(level) {
211
+ switch (level) {
212
+ case LogLevel.QUIET: return 'ERROR';
213
+ case LogLevel.NORMAL: return 'INFO';
214
+ case LogLevel.VERBOSE: return 'VERBOSE';
215
+ case LogLevel.DEBUG: return 'DEBUG';
216
+ default: return 'INFO';
217
+ }
218
+ }
219
+ /**
220
+ * Core logging method
221
+ */
222
+ log(level, category, message, data) {
223
+ if (!this.shouldLog(level))
224
+ return;
225
+ const entry = {
226
+ timestamp: new Date(),
227
+ level,
228
+ category,
229
+ message,
230
+ data
231
+ };
232
+ // Store entry for retrieval
233
+ this.logEntries.push(entry);
234
+ // Format for console output
235
+ const timestamp = this.formatTimestamp();
236
+ const levelName = this.colorize(`[${this.getLevelName(level)}]`, this.getLevelColor(level));
237
+ const categoryText = this.colorize(`[${category}]`, Colors.BLUE);
238
+ const messageText = message;
239
+ const consoleOutput = `${timestamp}${levelName} ${categoryText} ${messageText}`;
240
+ // Output to console
241
+ if (level === LogLevel.QUIET) {
242
+ console.error(consoleOutput);
243
+ }
244
+ else {
245
+ console.log(consoleOutput);
246
+ }
247
+ // Output to file (without colors)
248
+ if (this.fileHandle && !this.fileHandle.destroyed) {
249
+ const fileOutput = `${timestamp}[${this.getLevelName(level)}] [${category}] ${message}`;
250
+ this.fileHandle.write(fileOutput + '\n');
251
+ if (data) {
252
+ this.fileHandle.write(` Data: ${JSON.stringify(data, null, 2)}\n`);
253
+ }
254
+ }
255
+ }
256
+ /**
257
+ * Critical error logging (always shown)
258
+ */
259
+ error(category, message, data) {
260
+ this.log(LogLevel.QUIET, category, this.colorize(message, Colors.RED), data);
261
+ }
262
+ /**
263
+ * Standard information logging
264
+ */
265
+ info(category, message, data) {
266
+ this.log(LogLevel.NORMAL, category, message, data);
267
+ }
268
+ /**
269
+ * Success message logging
270
+ */
271
+ success(category, message, data) {
272
+ this.log(LogLevel.NORMAL, category, this.colorize(message, Colors.GREEN), data);
273
+ }
274
+ /**
275
+ * Warning message logging
276
+ */
277
+ warn(category, message, data) {
278
+ this.log(LogLevel.NORMAL, category, this.colorize(message, Colors.YELLOW), data);
279
+ }
280
+ /**
281
+ * Verbose logging (--verbose flag)
282
+ */
283
+ verbose(category, message, data) {
284
+ this.log(LogLevel.VERBOSE, category, message, data);
285
+ }
286
+ /**
287
+ * Debug logging (--debug flag)
288
+ */
289
+ debug(category, message, data) {
290
+ this.log(LogLevel.DEBUG, category, message, data);
291
+ }
292
+ /**
293
+ * Log file scanning activity
294
+ */
295
+ logFileScanning(filePath, action, reason) {
296
+ const message = reason ? `${action} ${filePath} (${reason})` : `${action} ${filePath}`;
297
+ if (action === 'scanning') {
298
+ this.verbose('SCAN', message);
299
+ }
300
+ else if (action === 'skipped') {
301
+ this.verbose('SKIP', message);
302
+ }
303
+ else if (action === 'ignored') {
304
+ this.verbose('IGNORE', message);
305
+ }
306
+ }
307
+ /**
308
+ * Log pattern checking activity
309
+ */
310
+ logPatternCheck(filePath, patternName, matched) {
311
+ const status = matched ? 'MATCH' : 'NO_MATCH';
312
+ this.debug('PATTERN', `${status} ${patternName} in ${filePath}`);
313
+ }
314
+ /**
315
+ * Log scan progress
316
+ */
317
+ logProgress(filesScanned, totalFiles, currentFile) {
318
+ const percentage = Math.round((filesScanned / totalFiles) * 100);
319
+ const message = currentFile
320
+ ? `Progress: ${filesScanned}/${totalFiles} (${percentage}%) - ${currentFile}`
321
+ : `Progress: ${filesScanned}/${totalFiles} (${percentage}%)`;
322
+ this.verbose('PROGRESS', message);
323
+ }
324
+ /**
325
+ * Log scan summary
326
+ */
327
+ logSummary(summary) {
328
+ this.info('SUMMARY', `Scanned ${summary.filesScanned} files in ${summary.duration}ms`);
329
+ this.info('SUMMARY', `Found ${summary.issuesFound} security issues`);
330
+ this.info('SUMMARY', `Security score: ${summary.securityScore}/100`);
331
+ }
332
+ /**
333
+ * Get all log entries
334
+ */
335
+ getLogEntries() {
336
+ return [...this.logEntries];
337
+ }
338
+ /**
339
+ * Get log entries by level
340
+ */
341
+ getLogEntriesByLevel(level) {
342
+ return this.logEntries.filter(entry => entry.level === level);
343
+ }
344
+ /**
345
+ * Clear log entries (keep file logging)
346
+ */
347
+ clearEntries() {
348
+ this.logEntries = [];
349
+ }
350
+ /**
351
+ * Get log statistics
352
+ */
353
+ getStats() {
354
+ const entriesByLevel = {
355
+ [LogLevel.QUIET]: 0,
356
+ [LogLevel.NORMAL]: 0,
357
+ [LogLevel.VERBOSE]: 0,
358
+ [LogLevel.DEBUG]: 0
359
+ };
360
+ this.logEntries.forEach(entry => {
361
+ entriesByLevel[entry.level]++;
362
+ });
363
+ return {
364
+ totalEntries: this.logEntries.length,
365
+ entriesByLevel
366
+ };
367
+ }
368
+ /**
369
+ * Close file handle and cleanup
370
+ */
371
+ close() {
372
+ if (this.fileHandle && !this.fileHandle.destroyed) {
373
+ this.fileHandle.end();
374
+ this.fileHandle = undefined;
375
+ }
376
+ }
377
+ /**
378
+ * Create logger from CLI flags
379
+ */
380
+ static fromFlags(flags) {
381
+ let level = LogLevel.NORMAL;
382
+ if (flags.quiet) {
383
+ level = LogLevel.QUIET;
384
+ }
385
+ else if (flags.debug) {
386
+ level = LogLevel.DEBUG;
387
+ }
388
+ else if (flags.verbose) {
389
+ level = LogLevel.VERBOSE;
390
+ }
391
+ return new Logger({
392
+ level,
393
+ logToFile: flags.logFile,
394
+ enableColors: !flags.quiet // Disable colors in quiet mode
395
+ });
396
+ }
397
+ }
398
+ exports.Logger = Logger;
399
+ /**
400
+ * Default logger instance
401
+ */
402
+ exports.logger = new Logger();
403
+ /**
404
+ * Convenience functions for common logging patterns
405
+ */
406
+ exports.log = {
407
+ error: (message, data) => exports.logger.error('APP', message, data),
408
+ info: (message, data) => exports.logger.info('APP', message, data),
409
+ success: (message, data) => exports.logger.success('APP', message, data),
410
+ warn: (message, data) => exports.logger.warn('APP', message, data),
411
+ verbose: (message, data) => exports.logger.verbose('APP', message, data),
412
+ debug: (message, data) => exports.logger.debug('APP', message, data),
413
+ };
414
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Markdown Output Formatter
3
+ * Formats scan results as readable Markdown reports
4
+ */
5
+ import type { ScanResult } from '../types';
6
+ /**
7
+ * Options for Markdown formatting
8
+ */
9
+ export interface MarkdownOptions {
10
+ includeMetadata?: boolean;
11
+ includeSummary?: boolean;
12
+ includeDetails?: boolean;
13
+ includeRecommendations?: boolean;
14
+ groupBySeverity?: boolean;
15
+ maxIssuesPerSeverity?: number;
16
+ }
17
+ /**
18
+ * Markdown Output Formatter class
19
+ * Formats security scan results as readable Markdown reports
20
+ */
21
+ export declare class MarkdownOutputFormatter {
22
+ private options;
23
+ constructor(options?: MarkdownOptions);
24
+ /**
25
+ * Format scan results as Markdown
26
+ */
27
+ format(result: ScanResult, securityScore?: number): string;
28
+ /**
29
+ * Format the report header
30
+ */
31
+ private formatHeader;
32
+ /**
33
+ * Format metadata section
34
+ */
35
+ private formatMetadata;
36
+ /**
37
+ * Format summary section
38
+ */
39
+ private formatSummary;
40
+ /**
41
+ * Format issues section
42
+ */
43
+ private formatIssues;
44
+ /**
45
+ * Format issues grouped by severity
46
+ */
47
+ private formatIssuesBySeverity;
48
+ /**
49
+ * Format issues as a simple list
50
+ */
51
+ private formatIssuesList;
52
+ /**
53
+ * Format a single issue
54
+ */
55
+ private formatSingleIssue;
56
+ /**
57
+ * Format recommendations section
58
+ */
59
+ private formatRecommendations;
60
+ /**
61
+ * Generate a filename for the markdown report
62
+ */
63
+ generateFilename(prefix?: string): string;
64
+ }
65
+ //# sourceMappingURL=markdown-output-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-output-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/markdown-output-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,OAAO,CAA4B;gBAE/B,OAAO,GAAE,eAAoB;IAWzC;;OAEG;IACI,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM;IA6BjE;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAgCrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsC9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA6G7B;;OAEG;IACI,gBAAgB,CAAC,MAAM,GAAE,MAAgC,GAAG,MAAM;CAI1E"}