codeslick-cli 1.0.4 → 1.1.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.
- package/README.md +31 -13
- package/bin/codeslick.cjs +19 -1
- package/dist/packages/cli/src/commands/scan.d.ts +3 -0
- package/dist/packages/cli/src/commands/scan.d.ts.map +1 -1
- package/dist/packages/cli/src/commands/scan.js +103 -24
- package/dist/packages/cli/src/commands/scan.js.map +1 -1
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts +28 -2
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts.map +1 -1
- package/dist/packages/cli/src/reporters/cli-reporter.js +393 -4
- package/dist/packages/cli/src/reporters/cli-reporter.js.map +1 -1
- package/dist/packages/cli/src/scanner/local-scanner.d.ts +5 -1
- package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -1
- package/dist/packages/cli/src/scanner/local-scanner.js +110 -16
- package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -1
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts.map +1 -1
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js +24 -16
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js.map +1 -1
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts.map +1 -1
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js +4 -12
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js.map +1 -1
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts.map +1 -1
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js +22 -9
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js.map +1 -1
- package/dist/src/lib/analyzers/javascript-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/javascript-analyzer.js +28 -13
- package/dist/src/lib/analyzers/javascript-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts.map +1 -1
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js +44 -18
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js.map +1 -1
- package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/python-analyzer.js +21 -13
- package/dist/src/lib/analyzers/python-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/validators/context-checker.js +21 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.js.map +1 -1
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts.map +1 -1
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js +4 -12
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js.map +1 -1
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts.map +1 -1
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js +25 -9
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js.map +1 -1
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts.map +1 -1
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js +14 -4
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js.map +1 -1
- package/dist/src/lib/analyzers/typescript/type-checker.d.ts +32 -0
- package/dist/src/lib/analyzers/typescript/type-checker.d.ts.map +1 -1
- package/dist/src/lib/analyzers/typescript/type-checker.js +264 -22
- package/dist/src/lib/analyzers/typescript/type-checker.js.map +1 -1
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/typescript-analyzer.js +27 -23
- package/dist/src/lib/analyzers/typescript-analyzer.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/scan.ts +77 -25
- package/src/reporters/cli-reporter.ts +449 -4
- package/src/scanner/local-scanner.ts +132 -19
package/README.md
CHANGED
|
@@ -149,15 +149,21 @@ codeslick scan [files...] [options]
|
|
|
149
149
|
```
|
|
150
150
|
|
|
151
151
|
**Options:**
|
|
152
|
-
- `--
|
|
152
|
+
- `--all, -a` - Scan all files in repository (overrides default staged-only behavior)
|
|
153
|
+
- `--quick, -q` - Quick scan - skip deep TypeScript type checking for speed
|
|
154
|
+
- `--verbose, -v` - Show all issues including MEDIUM and LOW (default: HIGH+ only)
|
|
153
155
|
- `--severity, -s <level>` - Override severity threshold (critical|high|medium|low)
|
|
154
156
|
- `--fix` - Auto-apply fixes where possible (experimental)
|
|
155
157
|
- `--json` - Output results as JSON (for CI/CD)
|
|
156
158
|
|
|
159
|
+
**Default Behavior:** Scans only **staged files** for fast pre-commit feedback.
|
|
160
|
+
|
|
157
161
|
**Examples:**
|
|
158
162
|
```bash
|
|
159
|
-
codeslick scan # Scan
|
|
160
|
-
codeslick scan --
|
|
163
|
+
codeslick scan # Scan staged files (default)
|
|
164
|
+
codeslick scan --all # Scan entire repository
|
|
165
|
+
codeslick scan --quick # Fast scan (skip TypeScript type checking)
|
|
166
|
+
codeslick scan --verbose # Show all issues (including MEDIUM/LOW)
|
|
161
167
|
codeslick scan src/**/*.js # Scan specific files/patterns
|
|
162
168
|
codeslick scan --json # JSON output (for CI/CD)
|
|
163
169
|
codeslick scan --severity high # Temporarily override threshold
|
|
@@ -390,14 +396,23 @@ npx codeslick-cli init
|
|
|
390
396
|
|
|
391
397
|
**Note**: You do NOT need GitHub or any remote repository. CodeSlick works with local git repositories.
|
|
392
398
|
|
|
393
|
-
### "No staged files
|
|
399
|
+
### "No staged files to scan" message
|
|
400
|
+
|
|
401
|
+
**Problem**: Running `codeslick scan` with no staged files.
|
|
394
402
|
|
|
395
|
-
**
|
|
403
|
+
**Why this happens**: By default, CodeSlick scans only staged files for fast pre-commit feedback.
|
|
396
404
|
|
|
397
|
-
**
|
|
405
|
+
**Solutions**:
|
|
398
406
|
```bash
|
|
407
|
+
# Option 1: Stage files first
|
|
399
408
|
git add <files>
|
|
400
|
-
codeslick scan
|
|
409
|
+
codeslick scan
|
|
410
|
+
|
|
411
|
+
# Option 2: Scan entire repository
|
|
412
|
+
codeslick scan --all
|
|
413
|
+
|
|
414
|
+
# Option 3: Scan specific path
|
|
415
|
+
codeslick scan src/
|
|
401
416
|
```
|
|
402
417
|
|
|
403
418
|
### Pre-commit hook not running
|
|
@@ -517,6 +532,14 @@ MIT License - see [LICENSE](../../LICENSE) for details.
|
|
|
517
532
|
- **Issues**: https://github.com/VitorLourenco/codeslick2/issues
|
|
518
533
|
- **Email**: support@codeslick.dev
|
|
519
534
|
|
|
535
|
+
## What's New in v1.0
|
|
536
|
+
|
|
537
|
+
- **Staged Files by Default** - Fast pre-commit scans (<1s for most commits)
|
|
538
|
+
- **Quick Mode** - Skip TypeScript type checking with `--quick` for even faster scans
|
|
539
|
+
- **Smart Output** - Only shows CRITICAL and HIGH issues by default (use `--verbose` for all)
|
|
540
|
+
- **Markdown Reports** - Auto-generates detailed reports for large scans (>20 files or >30 issues)
|
|
541
|
+
- **268 Security Checks** - OWASP Top 10:2025 compliant
|
|
542
|
+
|
|
520
543
|
## Roadmap
|
|
521
544
|
|
|
522
545
|
### v1.1 (Q2 2026)
|
|
@@ -524,12 +547,7 @@ MIT License - see [LICENSE](../../LICENSE) for details.
|
|
|
524
547
|
- Custom rule configuration
|
|
525
548
|
- IDE integration (VS Code extension)
|
|
526
549
|
|
|
527
|
-
### v1.2 (Q3 2026)
|
|
528
|
-
- SBOM generation
|
|
529
|
-
- SARIF output format
|
|
530
|
-
- Team collaboration features
|
|
531
|
-
|
|
532
550
|
---
|
|
533
551
|
|
|
534
|
-
**Made with
|
|
552
|
+
**Made with security in mind by CodeSlick**
|
|
535
553
|
https://codeslick.dev
|
package/bin/codeslick.cjs
CHANGED
|
@@ -67,7 +67,25 @@ yargs(hideBin(process.argv))
|
|
|
67
67
|
})
|
|
68
68
|
.option('staged', {
|
|
69
69
|
type: 'boolean',
|
|
70
|
-
description: 'Scan only staged files (git)',
|
|
70
|
+
description: 'Scan only staged files (git) - this is the default',
|
|
71
|
+
default: true,
|
|
72
|
+
})
|
|
73
|
+
.option('all', {
|
|
74
|
+
alias: 'a',
|
|
75
|
+
type: 'boolean',
|
|
76
|
+
description: 'Scan all files in repository (overrides --staged)',
|
|
77
|
+
default: false,
|
|
78
|
+
})
|
|
79
|
+
.option('quick', {
|
|
80
|
+
alias: 'q',
|
|
81
|
+
type: 'boolean',
|
|
82
|
+
description: 'Quick scan - skip deep TypeScript type checking for speed',
|
|
83
|
+
default: false,
|
|
84
|
+
})
|
|
85
|
+
.option('verbose', {
|
|
86
|
+
alias: 'v',
|
|
87
|
+
type: 'boolean',
|
|
88
|
+
description: 'Show detailed results for all files (default: top 10 only)',
|
|
71
89
|
default: false,
|
|
72
90
|
})
|
|
73
91
|
.option('severity', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAyBH;;GAEG;AACH,UAAU,QAAQ;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAwCD;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA0L/D"}
|
|
@@ -16,6 +16,39 @@
|
|
|
16
16
|
*
|
|
17
17
|
* @module packages/cli/src/commands/scan
|
|
18
18
|
*/
|
|
19
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
22
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
23
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
24
|
+
}
|
|
25
|
+
Object.defineProperty(o, k2, desc);
|
|
26
|
+
}) : (function(o, m, k, k2) {
|
|
27
|
+
if (k2 === undefined) k2 = k;
|
|
28
|
+
o[k2] = m[k];
|
|
29
|
+
}));
|
|
30
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
31
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
32
|
+
}) : function(o, v) {
|
|
33
|
+
o["default"] = v;
|
|
34
|
+
});
|
|
35
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
36
|
+
var ownKeys = function(o) {
|
|
37
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
38
|
+
var ar = [];
|
|
39
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
40
|
+
return ar;
|
|
41
|
+
};
|
|
42
|
+
return ownKeys(o);
|
|
43
|
+
};
|
|
44
|
+
return function (mod) {
|
|
45
|
+
if (mod && mod.__esModule) return mod;
|
|
46
|
+
var result = {};
|
|
47
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
48
|
+
__setModuleDefault(result, mod);
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
})();
|
|
19
52
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
20
53
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
21
54
|
};
|
|
@@ -49,14 +82,17 @@ async function getStagedFiles() {
|
|
|
49
82
|
}
|
|
50
83
|
/**
|
|
51
84
|
* Expand glob patterns to file paths
|
|
85
|
+
* @param patterns - Glob patterns to match
|
|
86
|
+
* @param exclude - Patterns to exclude (optional)
|
|
52
87
|
*/
|
|
53
|
-
async function expandGlobPatterns(patterns) {
|
|
88
|
+
async function expandGlobPatterns(patterns, exclude) {
|
|
54
89
|
const allFiles = [];
|
|
55
90
|
for (const pattern of patterns) {
|
|
56
91
|
const files = await (0, glob_1.glob)(pattern, {
|
|
57
92
|
cwd: process.cwd(),
|
|
58
93
|
absolute: true,
|
|
59
94
|
nodir: true,
|
|
95
|
+
ignore: exclude || [], // Apply exclusions during glob expansion
|
|
60
96
|
});
|
|
61
97
|
allFiles.push(...files);
|
|
62
98
|
}
|
|
@@ -83,27 +119,21 @@ async function scanCommand(args) {
|
|
|
83
119
|
severityThreshold: args.severity || config.severity || 'critical',
|
|
84
120
|
exclude: config.exclude || [],
|
|
85
121
|
autofix: args.fix || config.autofix || false,
|
|
122
|
+
quickMode: args.quick || false,
|
|
86
123
|
};
|
|
87
124
|
// Determine which files to scan
|
|
125
|
+
// Priority: specific files > --all > --staged (default)
|
|
88
126
|
let filePaths = [];
|
|
89
|
-
if (args.
|
|
90
|
-
// Scan
|
|
91
|
-
filePaths = await
|
|
92
|
-
if (filePaths.length === 0) {
|
|
93
|
-
(0, cli_reporter_1.printError)('No staged files found. Stage files with: git add <files>');
|
|
94
|
-
process.exit(0);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else if (args.files && args.files.length > 0) {
|
|
98
|
-
// Scan specific files/patterns
|
|
99
|
-
filePaths = await expandGlobPatterns(args.files);
|
|
127
|
+
if (args.files && args.files.length > 0) {
|
|
128
|
+
// Priority 1: Scan specific files/patterns provided by user
|
|
129
|
+
filePaths = await expandGlobPatterns(args.files, config.exclude);
|
|
100
130
|
if (filePaths.length === 0) {
|
|
101
131
|
(0, cli_reporter_1.printError)(`No files matched patterns: ${args.files.join(', ')}`);
|
|
102
132
|
process.exit(1);
|
|
103
133
|
}
|
|
104
134
|
}
|
|
105
|
-
else {
|
|
106
|
-
// Scan all files
|
|
135
|
+
else if (args.all) {
|
|
136
|
+
// Priority 2: Scan all files in repository (--all flag)
|
|
107
137
|
const defaultPatterns = config.languages?.map((lang) => {
|
|
108
138
|
switch (lang) {
|
|
109
139
|
case 'javascript':
|
|
@@ -118,45 +148,94 @@ async function scanCommand(args) {
|
|
|
118
148
|
return '';
|
|
119
149
|
}
|
|
120
150
|
}).filter(Boolean) || ['**/*.{js,jsx,ts,tsx,py,java}'];
|
|
121
|
-
filePaths = await expandGlobPatterns(defaultPatterns);
|
|
151
|
+
filePaths = await expandGlobPatterns(defaultPatterns, config.exclude);
|
|
122
152
|
if (filePaths.length === 0) {
|
|
123
153
|
(0, cli_reporter_1.printError)('No files found to scan.');
|
|
124
154
|
process.exit(0);
|
|
125
155
|
}
|
|
126
156
|
}
|
|
127
|
-
|
|
157
|
+
else {
|
|
158
|
+
// Priority 3 (Default): Scan staged files only
|
|
159
|
+
const stagedFiles = await getStagedFiles();
|
|
160
|
+
// Apply exclusions to staged files
|
|
161
|
+
if (config.exclude && config.exclude.length > 0) {
|
|
162
|
+
const { shouldExclude } = await Promise.resolve().then(() => __importStar(require('../scanner/local-scanner')));
|
|
163
|
+
filePaths = stagedFiles.filter(file => !shouldExclude(file, config.exclude));
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
filePaths = stagedFiles;
|
|
167
|
+
}
|
|
168
|
+
if (filePaths.length === 0) {
|
|
169
|
+
// Friendly message for no staged files (this is the default behavior)
|
|
170
|
+
console.log('');
|
|
171
|
+
console.log(chalk_1.default.cyan(' No staged files to scan.'));
|
|
172
|
+
console.log('');
|
|
173
|
+
console.log(chalk_1.default.gray(' CodeSlick scans staged files by default for fast feedback.'));
|
|
174
|
+
console.log('');
|
|
175
|
+
console.log(chalk_1.default.white(' Options:'));
|
|
176
|
+
console.log(chalk_1.default.green(' git add <files>') + chalk_1.default.gray(' Stage files, then run cs scan'));
|
|
177
|
+
console.log(chalk_1.default.green(' cs scan --all') + chalk_1.default.gray(' Scan entire repository'));
|
|
178
|
+
console.log(chalk_1.default.green(' cs scan src/') + chalk_1.default.gray(' Scan specific path'));
|
|
179
|
+
console.log('');
|
|
180
|
+
process.exit(0);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Print scan start with file count info
|
|
128
184
|
if (!args.json) {
|
|
129
185
|
(0, cli_reporter_1.printScanStart)(filePaths.length);
|
|
186
|
+
// Warn user about large scans
|
|
187
|
+
if (filePaths.length > 50) {
|
|
188
|
+
console.log('');
|
|
189
|
+
console.log(chalk_1.default.yellow(` Large scan detected (${filePaths.length} files)`));
|
|
190
|
+
if (!args.quick) {
|
|
191
|
+
console.log(chalk_1.default.gray(' TypeScript files require deep type analysis - this may take 1-3 minutes'));
|
|
192
|
+
console.log(chalk_1.default.gray(' Tip: Use --quick for faster scans (skips type checking)'));
|
|
193
|
+
}
|
|
194
|
+
console.log('');
|
|
195
|
+
}
|
|
130
196
|
}
|
|
131
197
|
// Show progress spinner
|
|
132
|
-
const spinner = !args.json ? (0, ora_1.default)(
|
|
198
|
+
const spinner = !args.json ? (0, ora_1.default)({
|
|
199
|
+
text: `Analyzing ${filePaths.length} files...`,
|
|
200
|
+
spinner: 'dots'
|
|
201
|
+
}).start() : null;
|
|
133
202
|
// Scan all files
|
|
134
203
|
const results = await (0, local_scanner_1.scanFiles)(filePaths, scannerConfig);
|
|
135
|
-
// Stop spinner
|
|
204
|
+
// Stop spinner with success
|
|
136
205
|
if (spinner) {
|
|
137
|
-
spinner.
|
|
206
|
+
spinner.succeed(`Analyzed ${results.length} files`);
|
|
138
207
|
}
|
|
139
208
|
const duration = Date.now() - startTime;
|
|
209
|
+
// Track unsupported files (files that were in the glob but not scanned)
|
|
210
|
+
const scannedPaths = new Set(results.map(r => r.filePath));
|
|
211
|
+
const skippedFiles = filePaths.filter(fp => !scannedPaths.has(fp));
|
|
212
|
+
// Calculate total vulnerabilities for output decision
|
|
213
|
+
const totalVulnerabilities = results.reduce((sum, r) => sum + r.critical + r.high + r.medium + r.low, 0);
|
|
140
214
|
// Output results
|
|
141
215
|
if (args.json) {
|
|
142
216
|
// JSON output mode (for CI/CD)
|
|
143
217
|
(0, cli_reporter_1.printJSONResults)(results);
|
|
144
218
|
}
|
|
219
|
+
else if (results.length > 20 || totalVulnerabilities > 30) {
|
|
220
|
+
// For large outputs: Generate report, show brief summary on screen
|
|
221
|
+
// Triggers when: >20 files OR >30 total vulnerabilities
|
|
222
|
+
const reportPath = (0, cli_reporter_1.generateMarkdownReport)(results, skippedFiles, duration);
|
|
223
|
+
(0, cli_reporter_1.printBriefSummary)(results, reportPath, duration);
|
|
224
|
+
}
|
|
145
225
|
else {
|
|
146
|
-
//
|
|
226
|
+
// For small outputs: Show full details on screen
|
|
147
227
|
(0, cli_reporter_1.printScanComplete)(duration);
|
|
148
|
-
(0, cli_reporter_1.printDetailedResults)(results);
|
|
149
228
|
(0, cli_reporter_1.printSummaryTable)(results);
|
|
229
|
+
(0, cli_reporter_1.printDetailedResults)(results, args.verbose);
|
|
150
230
|
}
|
|
151
231
|
// Show AI-Fix availability message if --fix flag was used
|
|
152
232
|
if (args.fix && !args.json) {
|
|
153
|
-
|
|
154
|
-
if (totalVulns > 0) {
|
|
233
|
+
if (totalVulnerabilities > 0) {
|
|
155
234
|
console.log('');
|
|
156
235
|
console.log(chalk_1.default.cyan.bold('🤖 AI-Powered Auto-Fix Available'));
|
|
157
236
|
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
158
237
|
console.log('');
|
|
159
|
-
console.log(chalk_1.default.white(`Found ${
|
|
238
|
+
console.log(chalk_1.default.white(`Found ${totalVulnerabilities} ${totalVulnerabilities === 1 ? 'vulnerability' : 'vulnerabilities'} that can be fixed with AI.`));
|
|
160
239
|
console.log('');
|
|
161
240
|
console.log(chalk_1.default.yellow('Auto-fix is available through:'));
|
|
162
241
|
console.log('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../../../src/commands/scan.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,11 +29,13 @@ export declare function printSummaryTable(results: FileScanResult[]): void;
|
|
|
29
29
|
/**
|
|
30
30
|
* Print detailed vulnerabilities for a file
|
|
31
31
|
*/
|
|
32
|
-
export declare function printFileVulnerabilities(result: FileScanResult): void;
|
|
32
|
+
export declare function printFileVulnerabilities(result: FileScanResult, showAll?: boolean): void;
|
|
33
33
|
/**
|
|
34
34
|
* Print all scan results with details
|
|
35
|
+
* @param results - Scan results
|
|
36
|
+
* @param verbose - If true, show all severities; if false, only HIGH and CRITICAL
|
|
35
37
|
*/
|
|
36
|
-
export declare function printDetailedResults(results: FileScanResult[]): void;
|
|
38
|
+
export declare function printDetailedResults(results: FileScanResult[], verbose?: boolean): void;
|
|
37
39
|
/**
|
|
38
40
|
* Print scan start message
|
|
39
41
|
*/
|
|
@@ -62,8 +64,32 @@ export declare function printCommitBlocked(threshold: string, critical: number,
|
|
|
62
64
|
* Print commit allowed message
|
|
63
65
|
*/
|
|
64
66
|
export declare function printCommitAllowed(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Print summary table grouped by language
|
|
69
|
+
* Shows files scanned, issues found, and critical count per language
|
|
70
|
+
*/
|
|
71
|
+
export declare function printLanguageSummary(results: FileScanResult[]): void;
|
|
72
|
+
/**
|
|
73
|
+
* Print unsupported/skipped files summary
|
|
74
|
+
* Groups by extension and shows counts
|
|
75
|
+
*/
|
|
76
|
+
export declare function printUnsupportedFiles(skippedFiles: string[]): void;
|
|
77
|
+
/**
|
|
78
|
+
* Print Top 10 most critical issues
|
|
79
|
+
* Shows the highest priority issues that should be fixed first
|
|
80
|
+
*/
|
|
81
|
+
export declare function printTop10Critical(results: FileScanResult[]): void;
|
|
65
82
|
/**
|
|
66
83
|
* Output results as JSON
|
|
67
84
|
*/
|
|
68
85
|
export declare function printJSONResults(results: FileScanResult[]): void;
|
|
86
|
+
/**
|
|
87
|
+
* Generate Markdown report file
|
|
88
|
+
* Returns the path to the generated report
|
|
89
|
+
*/
|
|
90
|
+
export declare function generateMarkdownReport(results: FileScanResult[], skippedFiles: string[], duration: number): string;
|
|
91
|
+
/**
|
|
92
|
+
* Print brief summary for screen (when report is generated)
|
|
93
|
+
*/
|
|
94
|
+
export declare function printBriefSummary(results: FileScanResult[], reportPath: string, duration: number): void;
|
|
69
95
|
//# sourceMappingURL=cli-reporter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-reporter.d.ts","sourceRoot":"","sources":["../../../../../src/reporters/cli-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"cli-reporter.d.ts","sourceRoot":"","sources":["../../../../../src/reporters/cli-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAa3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAqCjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,UAAQ,GAAG,IAAI,CAgDtF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,UAAQ,GAAG,IAAI,CA8BrF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAItD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGxD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,IAAI,CAwBN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAwDpE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAkClE;AA4BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAqDlE;AAUD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAyBhE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,MAAM,GACf,MAAM,CA4KR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,IAAI,CAgCN"}
|