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,237 @@
1
+ "use strict";
2
+ /**
3
+ * File Type Detector
4
+ * Detects file types, encodings, and determines scanning strategy
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.FileTypeDetector = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const chardet = __importStar(require("chardet"));
44
+ /**
45
+ * Size threshold for streaming (10MB)
46
+ */
47
+ const STREAM_THRESHOLD = 10 * 1024 * 1024;
48
+ /**
49
+ * Size of buffer to read for binary detection (8KB)
50
+ */
51
+ const DETECTION_BUFFER_SIZE = 8 * 1024;
52
+ /**
53
+ * Binary file extensions
54
+ */
55
+ const BINARY_EXTENSIONS = new Set([
56
+ // Images
57
+ '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.svg', '.webp', '.tiff', '.tif',
58
+ // Videos
59
+ '.mp4', '.avi', '.mov', '.wmv', '.flv', '.mkv', '.webm', '.m4v',
60
+ // Audio
61
+ '.mp3', '.wav', '.flac', '.aac', '.ogg', '.wma', '.m4a',
62
+ // Archives
63
+ '.zip', '.tar', '.gz', '.bz2', '.7z', '.rar', '.xz', '.tgz',
64
+ // Executables
65
+ '.exe', '.dll', '.so', '.dylib', '.bin', '.app', '.deb', '.rpm',
66
+ // Documents (binary formats)
67
+ '.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx',
68
+ // Databases
69
+ '.db', '.sqlite', '.sqlite3', '.mdb',
70
+ // Fonts
71
+ '.ttf', '.otf', '.woff', '.woff2', '.eot',
72
+ // Other
73
+ '.pyc', '.class', '.o', '.a', '.lib', '.jar', '.war',
74
+ ]);
75
+ /**
76
+ * FileTypeDetector class
77
+ * Detects file types and encodings before scanning
78
+ */
79
+ class FileTypeDetector {
80
+ /**
81
+ * Check if a file is binary based on extension and content
82
+ */
83
+ isBinary(filePath) {
84
+ // Check extension first (fast path)
85
+ const ext = path.extname(filePath).toLowerCase();
86
+ if (BINARY_EXTENSIONS.has(ext)) {
87
+ return true;
88
+ }
89
+ // Check content for binary markers
90
+ try {
91
+ const buffer = this.readFileBuffer(filePath, DETECTION_BUFFER_SIZE);
92
+ return this.isBinaryContent(buffer);
93
+ }
94
+ catch (error) {
95
+ // If we can't read the file, assume it's not binary
96
+ return false;
97
+ }
98
+ }
99
+ /**
100
+ * Detect file encoding
101
+ */
102
+ detectEncoding(filePath) {
103
+ try {
104
+ const buffer = this.readFileBuffer(filePath, DETECTION_BUFFER_SIZE);
105
+ // Check for BOM (Byte Order Mark)
106
+ const bom = this.detectBOM(buffer);
107
+ if (bom) {
108
+ return bom;
109
+ }
110
+ // Use chardet for encoding detection
111
+ const detected = chardet.detect(buffer);
112
+ if (detected) {
113
+ return this.normalizeEncoding(detected);
114
+ }
115
+ // Default to UTF-8
116
+ return 'utf-8';
117
+ }
118
+ catch (error) {
119
+ // If detection fails, assume UTF-8
120
+ return 'utf-8';
121
+ }
122
+ }
123
+ /**
124
+ * Check if file should be streamed (> 10MB)
125
+ */
126
+ shouldStream(filePath) {
127
+ try {
128
+ const stats = fs.statSync(filePath);
129
+ return stats.size > STREAM_THRESHOLD;
130
+ }
131
+ catch (error) {
132
+ // If we can't get file stats, don't stream
133
+ return false;
134
+ }
135
+ }
136
+ /**
137
+ * Get complete file information
138
+ */
139
+ getFileInfo(filePath) {
140
+ const isBinary = this.isBinary(filePath);
141
+ const encoding = isBinary ? 'unknown' : this.detectEncoding(filePath);
142
+ const shouldStream = this.shouldStream(filePath);
143
+ let size = 0;
144
+ try {
145
+ const stats = fs.statSync(filePath);
146
+ size = stats.size;
147
+ }
148
+ catch (error) {
149
+ // Size remains 0 if we can't read stats
150
+ }
151
+ return {
152
+ path: filePath,
153
+ isBinary,
154
+ encoding,
155
+ size,
156
+ shouldStream,
157
+ };
158
+ }
159
+ /**
160
+ * Read file buffer for detection
161
+ */
162
+ readFileBuffer(filePath, maxSize) {
163
+ const fd = fs.openSync(filePath, 'r');
164
+ try {
165
+ const stats = fs.fstatSync(fd);
166
+ const bufferSize = Math.min(stats.size, maxSize);
167
+ const buffer = Buffer.alloc(bufferSize);
168
+ fs.readSync(fd, buffer, 0, bufferSize, 0);
169
+ return buffer;
170
+ }
171
+ finally {
172
+ fs.closeSync(fd);
173
+ }
174
+ }
175
+ /**
176
+ * Check if buffer contains binary content
177
+ * Binary files typically have null bytes or high-bit characters
178
+ */
179
+ isBinaryContent(buffer) {
180
+ // Check for null bytes (strong indicator of binary)
181
+ for (let i = 0; i < buffer.length; i++) {
182
+ if (buffer[i] === 0) {
183
+ return true;
184
+ }
185
+ }
186
+ // Check for high percentage of non-ASCII characters
187
+ let nonAsciiCount = 0;
188
+ for (let i = 0; i < buffer.length; i++) {
189
+ if (buffer[i] > 127) {
190
+ nonAsciiCount++;
191
+ }
192
+ }
193
+ // If more than 30% non-ASCII, likely binary
194
+ const nonAsciiRatio = nonAsciiCount / buffer.length;
195
+ return nonAsciiRatio > 0.3;
196
+ }
197
+ /**
198
+ * Detect BOM (Byte Order Mark)
199
+ */
200
+ detectBOM(buffer) {
201
+ // UTF-16 LE BOM: FF FE
202
+ if (buffer.length >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) {
203
+ return 'utf-16';
204
+ }
205
+ // UTF-16 BE BOM: FE FF
206
+ if (buffer.length >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) {
207
+ return 'utf-16';
208
+ }
209
+ // UTF-8 BOM: EF BB BF
210
+ if (buffer.length >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {
211
+ return 'utf-8';
212
+ }
213
+ return null;
214
+ }
215
+ /**
216
+ * Normalize encoding name from chardet to our FileEncoding type
217
+ */
218
+ normalizeEncoding(detected) {
219
+ const lower = detected.toLowerCase();
220
+ if (lower.includes('utf-8') || lower.includes('utf8')) {
221
+ return 'utf-8';
222
+ }
223
+ if (lower.includes('utf-16') || lower.includes('utf16') || lower.includes('ucs-2')) {
224
+ return 'utf-16';
225
+ }
226
+ if (lower.includes('iso-8859') || lower.includes('latin')) {
227
+ return 'latin-1';
228
+ }
229
+ if (lower.includes('ascii')) {
230
+ return 'ascii';
231
+ }
232
+ // Default to UTF-8 for unknown encodings
233
+ return 'utf-8';
234
+ }
235
+ }
236
+ exports.FileTypeDetector = FileTypeDetector;
237
+ //# sourceMappingURL=file-type-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-type-detector.js","sourceRoot":"","sources":["../../src/utils/file-type-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Ignore Pattern Manager
3
+ * Manages file and directory ignore patterns from .avanaignore and CLI
4
+ */
5
+ /**
6
+ * Configuration for ignore patterns
7
+ */
8
+ export interface IgnoreConfig {
9
+ defaultPatterns: string[];
10
+ avanaIgnorePatterns: string[];
11
+ cliPatterns: string[];
12
+ }
13
+ /**
14
+ * Ignore Pattern Manager class
15
+ * Manages file and directory ignore patterns
16
+ */
17
+ export declare class IgnorePatternManager {
18
+ private patterns;
19
+ private ignoredCount;
20
+ private verbose;
21
+ constructor(verbose?: boolean);
22
+ /**
23
+ * Load patterns from .avanaignore file if it exists
24
+ */
25
+ loadPatterns(projectPath: string): void;
26
+ /**
27
+ * Add a pattern from CLI
28
+ */
29
+ addPattern(pattern: string): void;
30
+ /**
31
+ * Add multiple patterns from CLI
32
+ */
33
+ addPatterns(patterns: string[]): void;
34
+ /**
35
+ * Check if a file path should be ignored
36
+ * @param relativePath - Path relative to project root
37
+ * @returns true if file should be ignored
38
+ */
39
+ shouldIgnore(relativePath: string): boolean;
40
+ /**
41
+ * Get the count of ignored files
42
+ */
43
+ getIgnoredCount(): number;
44
+ /**
45
+ * Reset the ignored count
46
+ */
47
+ resetIgnoredCount(): void;
48
+ /**
49
+ * Get all active patterns
50
+ */
51
+ getPatterns(): string[];
52
+ /**
53
+ * Get configuration breakdown
54
+ */
55
+ getConfig(): IgnoreConfig;
56
+ /**
57
+ * Clear all non-default patterns
58
+ */
59
+ clearCustomPatterns(): void;
60
+ }
61
+ //# sourceMappingURL=ignore-pattern-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore-pattern-manager.d.ts","sourceRoot":"","sources":["../../src/utils/ignore-pattern-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAiED;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,OAAO,CAAkB;gBAErB,OAAO,GAAE,OAAe;IAMpC;;OAEG;IACI,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAwB9C;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMxC;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAI5C;;;;OAIG;IACI,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAmBlD;;OAEG;IACI,eAAe,IAAI,MAAM;IAIhC;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAIhC;;OAEG;IACI,WAAW,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACI,SAAS,IAAI,YAAY;IAQhC;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAGnC"}
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ /**
3
+ * Ignore Pattern Manager
4
+ * Manages file and directory ignore patterns from .avanaignore and CLI
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.IgnorePatternManager = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const minimatch_1 = require("minimatch");
44
+ /**
45
+ * Default patterns that should always be ignored
46
+ */
47
+ const DEFAULT_IGNORE_PATTERNS = [
48
+ // Dependencies
49
+ 'node_modules/**',
50
+ 'vendor/**',
51
+ 'bower_components/**',
52
+ // Build outputs
53
+ 'dist/**',
54
+ 'build/**',
55
+ 'out/**',
56
+ '.next/**',
57
+ 'target/**',
58
+ // Version control
59
+ '.git/**',
60
+ '.svn/**',
61
+ '.hg/**',
62
+ // IDE and editor files
63
+ '.vscode/**',
64
+ '.idea/**',
65
+ '*.swp',
66
+ '*.swo',
67
+ '*~',
68
+ // Test coverage
69
+ 'coverage/**',
70
+ '.nyc_output/**',
71
+ // Lock files
72
+ 'package-lock.json',
73
+ 'yarn.lock',
74
+ 'pnpm-lock.yaml',
75
+ 'Gemfile.lock',
76
+ 'Cargo.lock',
77
+ // Binary and media files
78
+ '*.png',
79
+ '*.jpg',
80
+ '*.jpeg',
81
+ '*.gif',
82
+ '*.ico',
83
+ '*.pdf',
84
+ '*.zip',
85
+ '*.tar',
86
+ '*.gz',
87
+ '*.exe',
88
+ '*.dll',
89
+ '*.so',
90
+ '*.dylib',
91
+ // Cache directories
92
+ '.cache/**',
93
+ 'tmp/**',
94
+ 'temp/**',
95
+ // Avana scan reports (avoid scanning own output)
96
+ 'scan-reports/**',
97
+ ];
98
+ /**
99
+ * Ignore Pattern Manager class
100
+ * Manages file and directory ignore patterns
101
+ */
102
+ class IgnorePatternManager {
103
+ patterns = [];
104
+ ignoredCount = 0;
105
+ verbose = false;
106
+ constructor(verbose = false) {
107
+ this.verbose = verbose;
108
+ // Always include default patterns
109
+ this.patterns = [...DEFAULT_IGNORE_PATTERNS];
110
+ }
111
+ /**
112
+ * Load patterns from .avanaignore file if it exists
113
+ */
114
+ loadPatterns(projectPath) {
115
+ const avanaIgnorePath = path.join(projectPath, '.avanaignore');
116
+ if (fs.existsSync(avanaIgnorePath)) {
117
+ try {
118
+ const content = fs.readFileSync(avanaIgnorePath, 'utf-8');
119
+ const filePatterns = content
120
+ .split('\n')
121
+ .map(line => line.trim())
122
+ .filter(line => line && !line.startsWith('#')); // Remove empty lines and comments
123
+ this.patterns.push(...filePatterns);
124
+ if (this.verbose) {
125
+ console.log(`Loaded ${filePatterns.length} patterns from .avanaignore`);
126
+ }
127
+ }
128
+ catch (error) {
129
+ if (this.verbose) {
130
+ console.warn(`Warning: Could not read .avanaignore: ${error instanceof Error ? error.message : 'Unknown error'}`);
131
+ }
132
+ }
133
+ }
134
+ }
135
+ /**
136
+ * Add a pattern from CLI
137
+ */
138
+ addPattern(pattern) {
139
+ if (pattern && pattern.trim()) {
140
+ this.patterns.push(pattern.trim());
141
+ }
142
+ }
143
+ /**
144
+ * Add multiple patterns from CLI
145
+ */
146
+ addPatterns(patterns) {
147
+ patterns.forEach(pattern => this.addPattern(pattern));
148
+ }
149
+ /**
150
+ * Check if a file path should be ignored
151
+ * @param relativePath - Path relative to project root
152
+ * @returns true if file should be ignored
153
+ */
154
+ shouldIgnore(relativePath) {
155
+ // Normalize path separators to forward slashes for consistent matching
156
+ const normalizedPath = relativePath.replace(/\\/g, '/');
157
+ for (const pattern of this.patterns) {
158
+ if ((0, minimatch_1.minimatch)(normalizedPath, pattern, { dot: true })) {
159
+ this.ignoredCount++;
160
+ if (this.verbose) {
161
+ console.log(`Ignoring ${relativePath} (matched pattern: ${pattern})`);
162
+ }
163
+ return true;
164
+ }
165
+ }
166
+ return false;
167
+ }
168
+ /**
169
+ * Get the count of ignored files
170
+ */
171
+ getIgnoredCount() {
172
+ return this.ignoredCount;
173
+ }
174
+ /**
175
+ * Reset the ignored count
176
+ */
177
+ resetIgnoredCount() {
178
+ this.ignoredCount = 0;
179
+ }
180
+ /**
181
+ * Get all active patterns
182
+ */
183
+ getPatterns() {
184
+ return [...this.patterns];
185
+ }
186
+ /**
187
+ * Get configuration breakdown
188
+ */
189
+ getConfig() {
190
+ return {
191
+ defaultPatterns: DEFAULT_IGNORE_PATTERNS,
192
+ avanaIgnorePatterns: this.patterns.filter(p => !DEFAULT_IGNORE_PATTERNS.includes(p)),
193
+ cliPatterns: [], // Would need to track separately if needed
194
+ };
195
+ }
196
+ /**
197
+ * Clear all non-default patterns
198
+ */
199
+ clearCustomPatterns() {
200
+ this.patterns = [...DEFAULT_IGNORE_PATTERNS];
201
+ }
202
+ }
203
+ exports.IgnorePatternManager = IgnorePatternManager;
204
+ //# sourceMappingURL=ignore-pattern-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore-pattern-manager.js","sourceRoot":"","sources":["../../src/utils/ignore-pattern-manager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,yCAAsC;AAWtC;;GAEG;AACH,MAAM,uBAAuB,GAAG;IAC9B,eAAe;IACf,iBAAiB;IACjB,WAAW;IACX,qBAAqB;IAErB,gBAAgB;IAChB,SAAS;IACT,UAAU;IACV,QAAQ;IACR,UAAU;IACV,WAAW;IAEX,kBAAkB;IAClB,SAAS;IACT,SAAS;IACT,QAAQ;IAER,uBAAuB;IACvB,YAAY;IACZ,UAAU;IACV,OAAO;IACP,OAAO;IACP,IAAI;IAEJ,gBAAgB;IAChB,aAAa;IACb,gBAAgB;IAEhB,aAAa;IACb,mBAAmB;IACnB,WAAW;IACX,gBAAgB;IAChB,cAAc;IACd,YAAY;IAEZ,yBAAyB;IACzB,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,SAAS;IAET,oBAAoB;IACpB,WAAW;IACX,QAAQ;IACR,SAAS;IAET,iDAAiD;IACjD,iBAAiB;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAa,oBAAoB;IACvB,QAAQ,GAAa,EAAE,CAAC;IACxB,YAAY,GAAW,CAAC,CAAC;IACzB,OAAO,GAAY,KAAK,CAAC;IAEjC,YAAY,UAAmB,KAAK;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,kCAAkC;QAClC,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,WAAmB;QACrC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAE/D,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM,YAAY,GAAG,OAAO;qBACzB,KAAK,CAAC,IAAI,CAAC;qBACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;qBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kCAAkC;gBAEpF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;gBAEpC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,UAAU,YAAY,CAAC,MAAM,6BAA6B,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,CAAC,IAAI,CAAC,yCAAyC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;gBACpH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,OAAe;QAC/B,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,QAAkB;QACnC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,YAAoB;QACtC,uEAAuE;QACvE,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAExD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,IAAA,qBAAS,EAAC,cAAc,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAEpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,sBAAsB,OAAO,GAAG,CAAC,CAAC;gBACxE,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACI,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,iBAAiB;QACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,SAAS;QACd,OAAO;YACL,eAAe,EAAE,uBAAuB;YACxC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpF,WAAW,EAAE,EAAE,EAAE,2CAA2C;SAC7D,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,mBAAmB;QACxB,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAC;IAC/C,CAAC;CACF;AApHD,oDAoHC"}