vskill 0.1.2 → 0.1.3
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/dist/audit/__fixtures__/clean-project/app.d.ts +1 -0
- package/dist/audit/__fixtures__/clean-project/app.js +8 -0
- package/dist/audit/__fixtures__/clean-project/app.js.map +1 -0
- package/dist/audit/__fixtures__/clean-project/utils.d.ts +2 -0
- package/dist/audit/__fixtures__/clean-project/utils.js +8 -0
- package/dist/audit/__fixtures__/clean-project/utils.js.map +1 -0
- package/dist/audit/__fixtures__/mixed-project/risky.d.ts +1 -0
- package/dist/audit/__fixtures__/mixed-project/risky.js +6 -0
- package/dist/audit/__fixtures__/mixed-project/risky.js.map +1 -0
- package/dist/audit/__fixtures__/mixed-project/safe.d.ts +1 -0
- package/dist/audit/__fixtures__/mixed-project/safe.js +5 -0
- package/dist/audit/__fixtures__/mixed-project/safe.js.map +1 -0
- package/dist/audit/__fixtures__/vulnerable-project/handler.d.ts +4 -0
- package/dist/audit/__fixtures__/vulnerable-project/handler.js +21 -0
- package/dist/audit/__fixtures__/vulnerable-project/handler.js.map +1 -0
- package/dist/audit/audit-integration.test.d.ts +1 -0
- package/dist/audit/audit-integration.test.js +92 -0
- package/dist/audit/audit-integration.test.js.map +1 -0
- package/dist/audit/audit-llm.d.ts +25 -0
- package/dist/audit/audit-llm.js +139 -0
- package/dist/audit/audit-llm.js.map +1 -0
- package/dist/audit/audit-llm.test.d.ts +1 -0
- package/dist/audit/audit-llm.test.js +110 -0
- package/dist/audit/audit-llm.test.js.map +1 -0
- package/dist/audit/audit-patterns.d.ts +31 -0
- package/dist/audit/audit-patterns.js +239 -0
- package/dist/audit/audit-patterns.js.map +1 -0
- package/dist/audit/audit-patterns.test.d.ts +1 -0
- package/dist/audit/audit-patterns.test.js +91 -0
- package/dist/audit/audit-patterns.test.js.map +1 -0
- package/dist/audit/audit-scanner.d.ts +16 -0
- package/dist/audit/audit-scanner.js +151 -0
- package/dist/audit/audit-scanner.js.map +1 -0
- package/dist/audit/audit-scanner.test.d.ts +1 -0
- package/dist/audit/audit-scanner.test.js +112 -0
- package/dist/audit/audit-scanner.test.js.map +1 -0
- package/dist/audit/audit-types.d.ts +98 -0
- package/dist/audit/audit-types.js +19 -0
- package/dist/audit/audit-types.js.map +1 -0
- package/dist/audit/audit-types.test.d.ts +1 -0
- package/dist/audit/audit-types.test.js +140 -0
- package/dist/audit/audit-types.test.js.map +1 -0
- package/dist/audit/config.d.ts +13 -0
- package/dist/audit/config.js +90 -0
- package/dist/audit/config.js.map +1 -0
- package/dist/audit/config.test.d.ts +1 -0
- package/dist/audit/config.test.js +44 -0
- package/dist/audit/config.test.js.map +1 -0
- package/dist/audit/file-discovery.d.ts +15 -0
- package/dist/audit/file-discovery.js +153 -0
- package/dist/audit/file-discovery.js.map +1 -0
- package/dist/audit/file-discovery.test.d.ts +1 -0
- package/dist/audit/file-discovery.test.js +120 -0
- package/dist/audit/file-discovery.test.js.map +1 -0
- package/dist/audit/fix-suggestions.d.ts +13 -0
- package/dist/audit/fix-suggestions.js +84 -0
- package/dist/audit/fix-suggestions.js.map +1 -0
- package/dist/audit/fix-suggestions.test.d.ts +1 -0
- package/dist/audit/fix-suggestions.test.js +35 -0
- package/dist/audit/fix-suggestions.test.js.map +1 -0
- package/dist/audit/formatters/json-formatter.d.ts +8 -0
- package/dist/audit/formatters/json-formatter.js +10 -0
- package/dist/audit/formatters/json-formatter.js.map +1 -0
- package/dist/audit/formatters/json-formatter.test.d.ts +1 -0
- package/dist/audit/formatters/json-formatter.test.js +49 -0
- package/dist/audit/formatters/json-formatter.test.js.map +1 -0
- package/dist/audit/formatters/report-formatter.d.ts +8 -0
- package/dist/audit/formatters/report-formatter.js +97 -0
- package/dist/audit/formatters/report-formatter.js.map +1 -0
- package/dist/audit/formatters/report-formatter.test.d.ts +1 -0
- package/dist/audit/formatters/report-formatter.test.js +51 -0
- package/dist/audit/formatters/report-formatter.test.js.map +1 -0
- package/dist/audit/formatters/sarif-formatter.d.ts +11 -0
- package/dist/audit/formatters/sarif-formatter.js +87 -0
- package/dist/audit/formatters/sarif-formatter.js.map +1 -0
- package/dist/audit/formatters/sarif-formatter.test.d.ts +1 -0
- package/dist/audit/formatters/sarif-formatter.test.js +71 -0
- package/dist/audit/formatters/sarif-formatter.test.js.map +1 -0
- package/dist/audit/formatters/terminal-formatter.d.ts +9 -0
- package/dist/audit/formatters/terminal-formatter.js +61 -0
- package/dist/audit/formatters/terminal-formatter.js.map +1 -0
- package/dist/audit/formatters/terminal-formatter.test.d.ts +1 -0
- package/dist/audit/formatters/terminal-formatter.test.js +51 -0
- package/dist/audit/formatters/terminal-formatter.test.js.map +1 -0
- package/dist/audit/index.d.ts +2 -0
- package/dist/audit/index.js +2 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/blocklist/blocklist-e2e.test.d.ts +1 -0
- package/dist/blocklist/blocklist-e2e.test.js +346 -0
- package/dist/blocklist/blocklist-e2e.test.js.map +1 -0
- package/dist/commands/add-blocklist-e2e.test.d.ts +1 -0
- package/dist/commands/add-blocklist-e2e.test.js +390 -0
- package/dist/commands/add-blocklist-e2e.test.js.map +1 -0
- package/dist/commands/add.js +184 -7
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/add.test.js +159 -19
- package/dist/commands/add.test.js.map +1 -1
- package/dist/commands/audit.d.ts +23 -0
- package/dist/commands/audit.js +100 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/audit.test.d.ts +1 -0
- package/dist/commands/audit.test.js +79 -0
- package/dist/commands/audit.test.js.map +1 -0
- package/dist/discovery/github-tree.d.ts +15 -0
- package/dist/discovery/github-tree.js +54 -0
- package/dist/discovery/github-tree.js.map +1 -0
- package/dist/discovery/github-tree.test.d.ts +1 -0
- package/dist/discovery/github-tree.test.js +143 -0
- package/dist/discovery/github-tree.test.js.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/lockfile/index.d.ts +1 -0
- package/dist/lockfile/index.js +1 -0
- package/dist/lockfile/index.js.map +1 -1
- package/dist/lockfile/lockfile.js +2 -1
- package/dist/lockfile/lockfile.js.map +1 -1
- package/dist/lockfile/project-root.d.ts +11 -0
- package/dist/lockfile/project-root.js +29 -0
- package/dist/lockfile/project-root.js.map +1 -0
- package/dist/lockfile/project-root.test.d.ts +1 -0
- package/dist/lockfile/project-root.test.js +49 -0
- package/dist/lockfile/project-root.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SARIF v2.1.0 formatter — generates SARIF-compliant JSON for CI tools.
|
|
3
|
+
*
|
|
4
|
+
* Enables integration with GitHub Code Scanning, VS Code SARIF Viewer,
|
|
5
|
+
* and other standard static analysis result consumers.
|
|
6
|
+
*/
|
|
7
|
+
/** Map severity to SARIF result level */
|
|
8
|
+
function toSarifLevel(severity) {
|
|
9
|
+
switch (severity) {
|
|
10
|
+
case "critical":
|
|
11
|
+
case "high":
|
|
12
|
+
return "error";
|
|
13
|
+
case "medium":
|
|
14
|
+
return "warning";
|
|
15
|
+
case "low":
|
|
16
|
+
case "info":
|
|
17
|
+
return "note";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Format an AuditResult as SARIF v2.1.0 JSON string.
|
|
22
|
+
*/
|
|
23
|
+
export function formatSarif(result) {
|
|
24
|
+
// Collect unique rules from findings
|
|
25
|
+
const rulesMap = new Map();
|
|
26
|
+
for (const f of result.findings) {
|
|
27
|
+
if (!rulesMap.has(f.ruleId)) {
|
|
28
|
+
rulesMap.set(f.ruleId, {
|
|
29
|
+
id: f.ruleId,
|
|
30
|
+
shortDescription: f.message,
|
|
31
|
+
category: f.category,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const rules = Array.from(rulesMap.values()).map((r) => ({
|
|
36
|
+
id: r.id,
|
|
37
|
+
name: r.id,
|
|
38
|
+
shortDescription: { text: r.shortDescription },
|
|
39
|
+
properties: { category: r.category },
|
|
40
|
+
}));
|
|
41
|
+
const results = result.findings.map((f) => ({
|
|
42
|
+
ruleId: f.ruleId,
|
|
43
|
+
level: toSarifLevel(f.severity),
|
|
44
|
+
message: { text: f.message },
|
|
45
|
+
locations: [
|
|
46
|
+
{
|
|
47
|
+
physicalLocation: {
|
|
48
|
+
artifactLocation: { uri: f.filePath },
|
|
49
|
+
region: {
|
|
50
|
+
startLine: f.line,
|
|
51
|
+
...(f.column ? { startColumn: f.column } : {}),
|
|
52
|
+
...(f.endLine ? { endLine: f.endLine } : {}),
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
properties: {
|
|
58
|
+
confidence: f.confidence,
|
|
59
|
+
source: f.source,
|
|
60
|
+
},
|
|
61
|
+
}));
|
|
62
|
+
const sarif = {
|
|
63
|
+
$schema: "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json",
|
|
64
|
+
version: "2.1.0",
|
|
65
|
+
runs: [
|
|
66
|
+
{
|
|
67
|
+
tool: {
|
|
68
|
+
driver: {
|
|
69
|
+
name: "vskill-audit",
|
|
70
|
+
informationUri: "https://verified-skill.com",
|
|
71
|
+
rules,
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
results,
|
|
75
|
+
invocations: [
|
|
76
|
+
{
|
|
77
|
+
executionSuccessful: true,
|
|
78
|
+
startTimeUtc: result.startedAt,
|
|
79
|
+
endTimeUtc: result.completedAt,
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
};
|
|
85
|
+
return JSON.stringify(sarif, null, 2);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=sarif-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sarif-formatter.js","sourceRoot":"","sources":["../../../src/audit/formatters/sarif-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { formatSarif } from "./sarif-formatter.js";
|
|
3
|
+
import { createDefaultAuditConfig } from "../audit-types.js";
|
|
4
|
+
function makeResult(overrides = {}) {
|
|
5
|
+
return {
|
|
6
|
+
rootPath: "/project",
|
|
7
|
+
startedAt: "2026-02-20T18:00:00Z",
|
|
8
|
+
completedAt: "2026-02-20T18:00:01Z",
|
|
9
|
+
durationMs: 1000,
|
|
10
|
+
filesScanned: 10,
|
|
11
|
+
filesWithFindings: 0,
|
|
12
|
+
findings: [],
|
|
13
|
+
summary: {
|
|
14
|
+
critical: 0, high: 0, medium: 0, low: 0, info: 0,
|
|
15
|
+
total: 0, score: 100, verdict: "PASS",
|
|
16
|
+
},
|
|
17
|
+
config: createDefaultAuditConfig(),
|
|
18
|
+
...overrides,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
describe("sarif-formatter", () => {
|
|
22
|
+
it("TC-033: output matches SARIF v2.1.0 structure", () => {
|
|
23
|
+
const output = formatSarif(makeResult());
|
|
24
|
+
const parsed = JSON.parse(output);
|
|
25
|
+
expect(parsed.$schema).toContain("sarif");
|
|
26
|
+
expect(parsed.version).toBe("2.1.0");
|
|
27
|
+
expect(parsed.runs).toBeInstanceOf(Array);
|
|
28
|
+
expect(parsed.runs).toHaveLength(1);
|
|
29
|
+
});
|
|
30
|
+
it("TC-034: tool information is correct", () => {
|
|
31
|
+
const output = formatSarif(makeResult());
|
|
32
|
+
const parsed = JSON.parse(output);
|
|
33
|
+
const driver = parsed.runs[0].tool.driver;
|
|
34
|
+
expect(driver.name).toBe("vskill-audit");
|
|
35
|
+
expect(driver.informationUri).toContain("verified-skill.com");
|
|
36
|
+
});
|
|
37
|
+
it("TC-035: findings map to SARIF results with correct locations", () => {
|
|
38
|
+
const result = makeResult({
|
|
39
|
+
findings: [
|
|
40
|
+
{ id: "AF-001", ruleId: "CI-001", severity: "critical", confidence: "high", category: "cmd", message: "exec call", filePath: "src/a.ts", line: 42, snippet: "code", source: "tier1" },
|
|
41
|
+
{ id: "AF-002", ruleId: "XSS-001", severity: "high", confidence: "high", category: "xss", message: "innerHTML", filePath: "src/b.ts", line: 10, snippet: "code", source: "tier1" },
|
|
42
|
+
],
|
|
43
|
+
summary: { critical: 1, high: 1, medium: 0, low: 0, info: 0, total: 2, score: 60, verdict: "CONCERNS" },
|
|
44
|
+
});
|
|
45
|
+
const parsed = JSON.parse(formatSarif(result));
|
|
46
|
+
const results = parsed.runs[0].results;
|
|
47
|
+
expect(results).toHaveLength(2);
|
|
48
|
+
expect(results[0].locations[0].physicalLocation.artifactLocation.uri).toBe("src/a.ts");
|
|
49
|
+
expect(results[0].locations[0].physicalLocation.region.startLine).toBe(42);
|
|
50
|
+
});
|
|
51
|
+
it("TC-036: severity maps to correct SARIF levels", () => {
|
|
52
|
+
const result = makeResult({
|
|
53
|
+
findings: [
|
|
54
|
+
{ id: "AF-001", ruleId: "R1", severity: "critical", confidence: "high", category: "c", message: "m", filePath: "f.ts", line: 1, snippet: "", source: "tier1" },
|
|
55
|
+
{ id: "AF-002", ruleId: "R2", severity: "high", confidence: "high", category: "c", message: "m", filePath: "f.ts", line: 2, snippet: "", source: "tier1" },
|
|
56
|
+
{ id: "AF-003", ruleId: "R3", severity: "medium", confidence: "high", category: "c", message: "m", filePath: "f.ts", line: 3, snippet: "", source: "tier1" },
|
|
57
|
+
{ id: "AF-004", ruleId: "R4", severity: "low", confidence: "high", category: "c", message: "m", filePath: "f.ts", line: 4, snippet: "", source: "tier1" },
|
|
58
|
+
{ id: "AF-005", ruleId: "R5", severity: "info", confidence: "high", category: "c", message: "m", filePath: "f.ts", line: 5, snippet: "", source: "tier1" },
|
|
59
|
+
],
|
|
60
|
+
summary: { critical: 1, high: 1, medium: 1, low: 1, info: 1, total: 5, score: 49, verdict: "FAIL" },
|
|
61
|
+
});
|
|
62
|
+
const parsed = JSON.parse(formatSarif(result));
|
|
63
|
+
const results = parsed.runs[0].results;
|
|
64
|
+
expect(results[0].level).toBe("error"); // critical
|
|
65
|
+
expect(results[1].level).toBe("error"); // high
|
|
66
|
+
expect(results[2].level).toBe("warning"); // medium
|
|
67
|
+
expect(results[3].level).toBe("note"); // low
|
|
68
|
+
expect(results[4].level).toBe("note"); // info
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=sarif-formatter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sarif-formatter.test.js","sourceRoot":"","sources":["../../../src/audit/formatters/sarif-formatter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal formatter — renders AuditResult as colored terminal output.
|
|
3
|
+
*/
|
|
4
|
+
import type { AuditResult } from "../audit-types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Format an AuditResult as a human-readable terminal string.
|
|
7
|
+
* Uses plain text (colors applied by the CLI command layer).
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatTerminal(result: AuditResult): string;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal formatter — renders AuditResult as colored terminal output.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Format an AuditResult as a human-readable terminal string.
|
|
6
|
+
* Uses plain text (colors applied by the CLI command layer).
|
|
7
|
+
*/
|
|
8
|
+
export function formatTerminal(result) {
|
|
9
|
+
const lines = [];
|
|
10
|
+
// Header
|
|
11
|
+
lines.push("vskill audit");
|
|
12
|
+
lines.push("");
|
|
13
|
+
lines.push(`Score: ${result.summary.score}/100 ` +
|
|
14
|
+
`Verdict: ${result.summary.verdict} ` +
|
|
15
|
+
`Files: ${result.filesScanned} ` +
|
|
16
|
+
`Time: ${result.durationMs}ms`);
|
|
17
|
+
lines.push("");
|
|
18
|
+
if (result.findings.length === 0) {
|
|
19
|
+
lines.push("No security issues found.");
|
|
20
|
+
lines.push("");
|
|
21
|
+
return lines.join("\n");
|
|
22
|
+
}
|
|
23
|
+
// Summary counts
|
|
24
|
+
const parts = [];
|
|
25
|
+
if (result.summary.critical > 0)
|
|
26
|
+
parts.push(`${result.summary.critical} critical`);
|
|
27
|
+
if (result.summary.high > 0)
|
|
28
|
+
parts.push(`${result.summary.high} high`);
|
|
29
|
+
if (result.summary.medium > 0)
|
|
30
|
+
parts.push(`${result.summary.medium} medium`);
|
|
31
|
+
if (result.summary.low > 0)
|
|
32
|
+
parts.push(`${result.summary.low} low`);
|
|
33
|
+
if (result.summary.info > 0)
|
|
34
|
+
parts.push(`${result.summary.info} info`);
|
|
35
|
+
lines.push(`Findings: ${parts.join(" ")}`);
|
|
36
|
+
lines.push("");
|
|
37
|
+
// Group findings by file
|
|
38
|
+
const byFile = new Map();
|
|
39
|
+
for (const f of result.findings) {
|
|
40
|
+
const group = byFile.get(f.filePath) || [];
|
|
41
|
+
group.push(f);
|
|
42
|
+
byFile.set(f.filePath, group);
|
|
43
|
+
}
|
|
44
|
+
for (const [filePath, findings] of byFile) {
|
|
45
|
+
lines.push(`── ${filePath} (${findings.length} finding${findings.length > 1 ? "s" : ""})`);
|
|
46
|
+
lines.push("");
|
|
47
|
+
for (const f of findings) {
|
|
48
|
+
lines.push(` ${f.severity.toUpperCase()} [${f.ruleId}] ${f.message}`);
|
|
49
|
+
lines.push(` Line ${f.line}`);
|
|
50
|
+
if (f.snippet) {
|
|
51
|
+
lines.push("");
|
|
52
|
+
for (const snippetLine of f.snippet.split("\n")) {
|
|
53
|
+
lines.push(` ${snippetLine}`);
|
|
54
|
+
}
|
|
55
|
+
lines.push("");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return lines.join("\n");
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=terminal-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-formatter.js","sourceRoot":"","sources":["../../../src/audit/formatters/terminal-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { formatTerminal } from "./terminal-formatter.js";
|
|
3
|
+
import { createDefaultAuditConfig } from "../audit-types.js";
|
|
4
|
+
function makeResult(overrides = {}) {
|
|
5
|
+
return {
|
|
6
|
+
rootPath: "/project",
|
|
7
|
+
startedAt: "2026-02-20T18:00:00Z",
|
|
8
|
+
completedAt: "2026-02-20T18:00:01Z",
|
|
9
|
+
durationMs: 1000,
|
|
10
|
+
filesScanned: 10,
|
|
11
|
+
filesWithFindings: 0,
|
|
12
|
+
findings: [],
|
|
13
|
+
summary: {
|
|
14
|
+
critical: 0, high: 0, medium: 0, low: 0, info: 0,
|
|
15
|
+
total: 0, score: 100, verdict: "PASS",
|
|
16
|
+
},
|
|
17
|
+
config: createDefaultAuditConfig(),
|
|
18
|
+
...overrides,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
describe("terminal-formatter", () => {
|
|
22
|
+
it("TC-027: formats empty results correctly", () => {
|
|
23
|
+
const output = formatTerminal(makeResult());
|
|
24
|
+
expect(output).toContain("No security issues found");
|
|
25
|
+
});
|
|
26
|
+
it("TC-028: groups findings by file", () => {
|
|
27
|
+
const output = formatTerminal(makeResult({
|
|
28
|
+
filesWithFindings: 3,
|
|
29
|
+
findings: [
|
|
30
|
+
{ id: "AF-001", ruleId: "CI-001", severity: "critical", confidence: "high", category: "cmd", message: "exec", filePath: "src/a.ts", line: 1, snippet: "code", source: "tier1" },
|
|
31
|
+
{ id: "AF-002", ruleId: "XSS-001", severity: "high", confidence: "high", category: "xss", message: "xss", filePath: "src/b.ts", line: 2, snippet: "code", source: "tier1" },
|
|
32
|
+
{ id: "AF-003", ruleId: "SQLI-001", severity: "critical", confidence: "high", category: "sql", message: "sql", filePath: "src/c.ts", line: 3, snippet: "code", source: "tier1" },
|
|
33
|
+
],
|
|
34
|
+
summary: { critical: 2, high: 1, medium: 0, low: 0, info: 0, total: 3, score: 35, verdict: "FAIL" },
|
|
35
|
+
}));
|
|
36
|
+
expect(output).toContain("src/a.ts");
|
|
37
|
+
expect(output).toContain("src/b.ts");
|
|
38
|
+
expect(output).toContain("src/c.ts");
|
|
39
|
+
});
|
|
40
|
+
it("TC-029: includes code snippets", () => {
|
|
41
|
+
const output = formatTerminal(makeResult({
|
|
42
|
+
filesWithFindings: 1,
|
|
43
|
+
findings: [
|
|
44
|
+
{ id: "AF-001", ruleId: "CI-001", severity: "critical", confidence: "high", category: "cmd", message: "exec call", filePath: "src/a.ts", line: 1, snippet: "> 1 | exec(command);", source: "tier1" },
|
|
45
|
+
],
|
|
46
|
+
summary: { critical: 1, high: 0, medium: 0, low: 0, info: 0, total: 1, score: 75, verdict: "CONCERNS" },
|
|
47
|
+
}));
|
|
48
|
+
expect(output).toContain("exec(command)");
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=terminal-formatter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-formatter.test.js","sourceRoot":"","sources":["../../../src/audit/formatters/terminal-formatter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,GACzB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|