projscan 4.9.3 → 4.10.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 +23 -1
- package/dist/analyzers/securityCheck.js +33 -15
- package/dist/analyzers/securityCheck.js.map +1 -1
- package/dist/analyzers/supplyChainCheck.js +9 -2
- package/dist/analyzers/supplyChainCheck.js.map +1 -1
- package/dist/cli/commands/bugHunt.js +3 -1
- package/dist/cli/commands/bugHunt.js.map +1 -1
- package/dist/cli/commands/ci.js +29 -13
- package/dist/cli/commands/ci.js.map +1 -1
- package/dist/cli/commands/dogfood.js +2 -0
- package/dist/cli/commands/dogfood.js.map +1 -1
- package/dist/cli/commands/feedback.js +21 -2
- package/dist/cli/commands/feedback.js.map +1 -1
- package/dist/cli/commands/init.js +3 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/route.js +3 -2
- package/dist/cli/commands/route.js.map +1 -1
- package/dist/core/adoption.js +50 -21
- package/dist/core/adoption.js.map +1 -1
- package/dist/core/agentBrief.js +2 -1
- package/dist/core/agentBrief.js.map +1 -1
- package/dist/core/bugHunt.js +51 -22
- package/dist/core/bugHunt.js.map +1 -1
- package/dist/core/bugHuntHotspotFindings.js +2 -1
- package/dist/core/bugHuntHotspotFindings.js.map +1 -1
- package/dist/core/ciGate.d.ts +10 -0
- package/dist/core/ciGate.js +21 -0
- package/dist/core/ciGate.js.map +1 -0
- package/dist/core/dogfood.d.ts +1 -0
- package/dist/core/dogfood.js +42 -20
- package/dist/core/dogfood.js.map +1 -1
- package/dist/core/dogfoodDiscovery.d.ts +8 -0
- package/dist/core/dogfoodDiscovery.js +119 -0
- package/dist/core/dogfoodDiscovery.js.map +1 -0
- package/dist/core/feedback.js +73 -5
- package/dist/core/feedback.js.map +1 -1
- package/dist/core/fileInspectionReport.js +37 -0
- package/dist/core/fileInspectionReport.js.map +1 -1
- package/dist/core/intentRouterArchitectureKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterArchitectureKeywordWeights.js +69 -0
- package/dist/core/intentRouterArchitectureKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterCatalog.js +85 -31
- package/dist/core/intentRouterCatalog.js.map +1 -1
- package/dist/core/intentRouterDependencyKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterDependencyKeywordWeights.js +100 -0
- package/dist/core/intentRouterDependencyKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterFileImpactKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterFileImpactKeywordWeights.js +92 -0
- package/dist/core/intentRouterFileImpactKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterKeywordEarlyGuards.js +8 -3
- package/dist/core/intentRouterKeywordEarlyGuards.js.map +1 -1
- package/dist/core/intentRouterKeywordSearchGuards.js +28 -24
- package/dist/core/intentRouterKeywordSearchGuards.js.map +1 -1
- package/dist/core/intentRouterKeywordToolGuards.js +43 -0
- package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
- package/dist/core/intentRouterKeywordWeights.js +40 -1222
- package/dist/core/intentRouterKeywordWeights.js.map +1 -1
- package/dist/core/intentRouterOperationalKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterOperationalKeywordWeights.js +203 -0
- package/dist/core/intentRouterOperationalKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterPlanningSignals.js +4 -1
- package/dist/core/intentRouterPlanningSignals.js.map +1 -1
- package/dist/core/intentRouterPrDiffKeywords.d.ts +4 -0
- package/dist/core/intentRouterPrDiffKeywords.js +64 -0
- package/dist/core/intentRouterPrDiffKeywords.js.map +1 -0
- package/dist/core/intentRouterPrDiffSignals.js +6 -0
- package/dist/core/intentRouterPrDiffSignals.js.map +1 -1
- package/dist/core/intentRouterProductImprovementSignals.d.ts +1 -0
- package/dist/core/intentRouterProductImprovementSignals.js +48 -0
- package/dist/core/intentRouterProductImprovementSignals.js.map +1 -0
- package/dist/core/intentRouterRegressionKeywordMatches.js +3 -0
- package/dist/core/intentRouterRegressionKeywordMatches.js.map +1 -1
- package/dist/core/intentRouterRegressionKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterRegressionKeywordWeights.js +118 -0
- package/dist/core/intentRouterRegressionKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterReleaseSignals.d.ts +1 -0
- package/dist/core/intentRouterReleaseSignals.js +47 -0
- package/dist/core/intentRouterReleaseSignals.js.map +1 -1
- package/dist/core/intentRouterReviewSignals.d.ts +1 -0
- package/dist/core/intentRouterReviewSignals.js +23 -1
- package/dist/core/intentRouterReviewSignals.js.map +1 -1
- package/dist/core/intentRouterSearchKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterSearchKeywordWeights.js +407 -0
- package/dist/core/intentRouterSearchKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterSecurityKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterSecurityKeywordWeights.js +50 -0
- package/dist/core/intentRouterSecurityKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterTrustFeedbackKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterTrustFeedbackKeywordWeights.js +222 -0
- package/dist/core/intentRouterTrustFeedbackKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterUnderstandSignals.js +1 -0
- package/dist/core/intentRouterUnderstandSignals.js.map +1 -1
- package/dist/core/intentRouterWorkSignals.js +3 -0
- package/dist/core/intentRouterWorkSignals.js.map +1 -1
- package/dist/core/intentRouterWorkflowKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterWorkflowKeywordWeights.js +124 -0
- package/dist/core/intentRouterWorkflowKeywordWeights.js.map +1 -0
- package/dist/core/issueEngine.js +46 -2
- package/dist/core/issueEngine.js.map +1 -1
- package/dist/core/memory.d.ts +2 -0
- package/dist/core/memory.js +33 -1
- package/dist/core/memory.js.map +1 -1
- package/dist/core/preflightChangedFiles.d.ts +3 -0
- package/dist/core/preflightChangedFiles.js +13 -0
- package/dist/core/preflightChangedFiles.js.map +1 -1
- package/dist/core/preflightEvidence.d.ts +3 -0
- package/dist/core/preflightEvidence.js +3 -0
- package/dist/core/preflightEvidence.js.map +1 -1
- package/dist/core/privacy.d.ts +2 -0
- package/dist/core/privacy.js +10 -0
- package/dist/core/privacy.js.map +1 -1
- package/dist/core/qualityScorecard.js +25 -13
- package/dist/core/qualityScorecard.js.map +1 -1
- package/dist/core/startEvidence.js +26 -1
- package/dist/core/startEvidence.js.map +1 -1
- package/dist/core/startFixedRouteCriteria.js +5 -0
- package/dist/core/startFixedRouteCriteria.js.map +1 -1
- package/dist/core/startInputs.d.ts +3 -0
- package/dist/core/startMissionPolicy.d.ts +1 -1
- package/dist/core/startMissionPolicy.js +18 -7
- package/dist/core/startMissionPolicy.js.map +1 -1
- package/dist/core/startMode.js +17 -4
- package/dist/core/startMode.js.map +1 -1
- package/dist/core/startReportBuilder.js +1 -1
- package/dist/core/startReportBuilder.js.map +1 -1
- package/dist/core/startReviewGate.js +26 -4
- package/dist/core/startReviewGate.js.map +1 -1
- package/dist/core/startRouteActions.js +6 -0
- package/dist/core/startRouteActions.js.map +1 -1
- package/dist/core/understand.js +60 -13
- package/dist/core/understand.js.map +1 -1
- package/dist/core/workplan.js +99 -17
- package/dist/core/workplan.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/reporters/ciIssueDetails.d.ts +10 -0
- package/dist/reporters/ciIssueDetails.js +37 -0
- package/dist/reporters/ciIssueDetails.js.map +1 -0
- package/dist/reporters/consoleCiReporter.d.ts +2 -1
- package/dist/reporters/consoleCiReporter.js +26 -9
- package/dist/reporters/consoleCiReporter.js.map +1 -1
- package/dist/reporters/consoleFileReporter.js +10 -0
- package/dist/reporters/consoleFileReporter.js.map +1 -1
- package/dist/reporters/consoleHealthReporter.js +3 -1
- package/dist/reporters/consoleHealthReporter.js.map +1 -1
- package/dist/reporters/jsonReporter.d.ts +2 -1
- package/dist/reporters/jsonReporter.js +17 -10
- package/dist/reporters/jsonReporter.js.map +1 -1
- package/dist/reporters/markdownFileReporter.js +11 -0
- package/dist/reporters/markdownFileReporter.js.map +1 -1
- package/dist/reporters/markdownHealthReporter.d.ts +2 -1
- package/dist/reporters/markdownHealthReporter.js +5 -5
- package/dist/reporters/markdownHealthReporter.js.map +1 -1
- package/dist/reporters/scoreBreakdownReporter.d.ts +2 -0
- package/dist/reporters/scoreBreakdownReporter.js +24 -0
- package/dist/reporters/scoreBreakdownReporter.js.map +1 -0
- package/dist/tool-manifest.json +2 -2
- package/dist/types/analysis.d.ts +21 -1
- package/dist/types/bugHunt.d.ts +3 -0
- package/dist/types/config.d.ts +9 -0
- package/dist/types/dogfood.d.ts +15 -1
- package/dist/types/inspection.d.ts +3 -0
- package/dist/types/preflight.d.ts +3 -0
- package/dist/types/startMissionControl.d.ts +3 -0
- package/dist/types/startMissionReview.d.ts +2 -0
- package/dist/utils/ciFailOn.d.ts +5 -0
- package/dist/utils/ciFailOn.js +12 -0
- package/dist/utils/ciFailOn.js.map +1 -0
- package/dist/utils/config.js +3 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/configBasics.d.ts +2 -0
- package/dist/utils/configBasics.js +21 -0
- package/dist/utils/configBasics.js.map +1 -1
- package/dist/utils/configIssueRules.js +64 -0
- package/dist/utils/configIssueRules.js.map +1 -1
- package/dist/utils/scoreCalculator.js +77 -16
- package/dist/utils/scoreCalculator.js.map +1 -1
- package/docs/GUIDE.md +36 -6
- package/package.json +1 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { evaluateCiGate } from '../core/ciGate.js';
|
|
1
2
|
import { calculateScore } from '../utils/scoreCalculator.js';
|
|
3
|
+
import { toCiIssueDetail } from './ciIssueDetails.js';
|
|
2
4
|
export const CLI_JSON_SCHEMA_VERSION = 2;
|
|
3
5
|
function emitJson(payload) {
|
|
4
6
|
console.log(JSON.stringify({ schemaVersion: CLI_JSON_SCHEMA_VERSION, ...payload }, null, 2));
|
|
@@ -10,7 +12,7 @@ export function reportAnalysisJson(report, reportControls) {
|
|
|
10
12
|
});
|
|
11
13
|
}
|
|
12
14
|
export function reportHealthJson(issues, reportControls) {
|
|
13
|
-
const { score, grade, errors, warnings, infos } = calculateScore(issues);
|
|
15
|
+
const { score, grade, errors, warnings, infos, scoreBreakdown } = calculateScore(issues);
|
|
14
16
|
console.log(JSON.stringify({
|
|
15
17
|
schemaVersion: CLI_JSON_SCHEMA_VERSION,
|
|
16
18
|
...(reportControls ? { reportControls } : {}),
|
|
@@ -21,25 +23,30 @@ export function reportHealthJson(issues, reportControls) {
|
|
|
21
23
|
errors,
|
|
22
24
|
warnings,
|
|
23
25
|
info: infos,
|
|
26
|
+
scoreBreakdown,
|
|
24
27
|
issues,
|
|
25
28
|
},
|
|
26
29
|
}, null, 2));
|
|
27
30
|
}
|
|
28
|
-
export function reportCiJson(issues, threshold, reportControls) {
|
|
29
|
-
const
|
|
31
|
+
export function reportCiJson(issues, threshold, reportControls, failOn) {
|
|
32
|
+
const gate = evaluateCiGate(issues, threshold, failOn);
|
|
30
33
|
console.log(JSON.stringify({
|
|
31
34
|
schemaVersion: CLI_JSON_SCHEMA_VERSION,
|
|
32
35
|
...(reportControls ? { reportControls } : {}),
|
|
33
36
|
ci: {
|
|
34
|
-
score,
|
|
35
|
-
grade,
|
|
36
|
-
pass:
|
|
37
|
+
score: gate.score,
|
|
38
|
+
grade: gate.grade,
|
|
39
|
+
pass: gate.pass,
|
|
37
40
|
threshold,
|
|
41
|
+
failOn: gate.failOn,
|
|
42
|
+
scorePass: gate.scorePass,
|
|
43
|
+
severityFloorMet: gate.severityFloorMet,
|
|
38
44
|
totalIssues: issues.length,
|
|
39
|
-
errors,
|
|
40
|
-
warnings,
|
|
41
|
-
info: infos,
|
|
42
|
-
|
|
45
|
+
errors: gate.errors,
|
|
46
|
+
warnings: gate.warnings,
|
|
47
|
+
info: gate.infos,
|
|
48
|
+
scoreBreakdown: gate.scoreBreakdown,
|
|
49
|
+
issues: issues.map(toCiIssueDetail),
|
|
43
50
|
},
|
|
44
51
|
}, null, 2));
|
|
45
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonReporter.js","sourceRoot":"","sources":["../../src/reporters/jsonReporter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jsonReporter.js","sourceRoot":"","sources":["../../src/reporters/jsonReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export function reportFileMarkdown(insp) {
|
|
|
12
12
|
appendFileImports(lines, insp);
|
|
13
13
|
appendFileExports(lines, insp);
|
|
14
14
|
appendFileFunctions(lines, insp);
|
|
15
|
+
appendFileSuggestedActions(lines, insp);
|
|
15
16
|
console.log(lines.join('\n'));
|
|
16
17
|
}
|
|
17
18
|
function appendFileSummary(lines, insp) {
|
|
@@ -89,4 +90,14 @@ function appendFileFunctions(lines, insp) {
|
|
|
89
90
|
lines.push('', `_... and ${insp.functions.length - 20} more_`);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
93
|
+
function appendFileSuggestedActions(lines, insp) {
|
|
94
|
+
if (!insp.suggestedNextActions || insp.suggestedNextActions.length === 0)
|
|
95
|
+
return;
|
|
96
|
+
lines.push('', '## Next Actions', '');
|
|
97
|
+
for (const action of insp.suggestedNextActions) {
|
|
98
|
+
lines.push(action.command
|
|
99
|
+
? `- **${action.label}:** \`${action.command}\``
|
|
100
|
+
: `- **${action.label}**`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
92
103
|
//# sourceMappingURL=markdownFileReporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownFileReporter.js","sourceRoot":"","sources":["../../src/reporters/markdownFileReporter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"markdownFileReporter.js","sourceRoot":"","sources":["../../src/reporters/markdownFileReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Issue } from '../types.js';
|
|
2
2
|
import type { ReportControlsMetadata } from '../core/reportScope.js';
|
|
3
|
+
import type { CiFailOnSeverity } from '../types/config.js';
|
|
3
4
|
export declare function reportHealthMarkdown(issues: Issue[], reportControls?: ReportControlsMetadata): void;
|
|
4
|
-
export declare function reportCiMarkdown(issues: Issue[], threshold: number, reportControls?: ReportControlsMetadata): void;
|
|
5
|
+
export declare function reportCiMarkdown(issues: Issue[], threshold: number, reportControls?: ReportControlsMetadata, failOn?: CiFailOnSeverity): void;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { evaluateCiGate } from '../core/ciGate.js';
|
|
1
2
|
import { calculateScore, badgeMarkdown } from '../utils/scoreCalculator.js';
|
|
2
3
|
export function reportHealthMarkdown(issues, reportControls) {
|
|
3
4
|
const { score, grade } = calculateScore(issues);
|
|
@@ -10,12 +11,11 @@ export function reportHealthMarkdown(issues, reportControls) {
|
|
|
10
11
|
appendHealthIssues(lines, issues);
|
|
11
12
|
console.log(lines.join('\n'));
|
|
12
13
|
}
|
|
13
|
-
export function reportCiMarkdown(issues, threshold, reportControls) {
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const lines = [`# Projscan CI - ${ciLabel(pass)}`, ''];
|
|
14
|
+
export function reportCiMarkdown(issues, threshold, reportControls, failOn) {
|
|
15
|
+
const gate = evaluateCiGate(issues, threshold, failOn);
|
|
16
|
+
const lines = [`# Projscan CI - ${ciLabel(gate.pass)}`, ''];
|
|
17
17
|
appendReportControlsMarkdown(lines, reportControls);
|
|
18
|
-
lines.push(`| Metric | Value |`, `| --- | --- |`, `| Score | **${score}/100** |`, `| Grade | **${grade}** |`, `| Threshold | ${threshold} |`, `| Result | ${ciIcon(pass)} ${ciResultLabel(pass)} |`);
|
|
18
|
+
lines.push(`| Metric | Value |`, `| --- | --- |`, `| Score | **${gate.score}/100** |`, `| Grade | **${gate.grade}** |`, `| Threshold | ${threshold} |`, `| Fail on | ${gate.failOn} |`, `| Result | ${ciIcon(gate.pass)} ${ciResultLabel(gate.pass)} |`);
|
|
19
19
|
appendCiIssues(lines, issues);
|
|
20
20
|
console.log(lines.join('\n'));
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownHealthReporter.js","sourceRoot":"","sources":["../../src/reporters/markdownHealthReporter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdownHealthReporter.js","sourceRoot":"","sources":["../../src/reporters/markdownHealthReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export function printScoreBreakdown(breakdown) {
|
|
3
|
+
if (!breakdown || breakdown.uncappedPenalty <= 0)
|
|
4
|
+
return;
|
|
5
|
+
console.log(` Score breakdown: ${breakdown.baseScore} - ${breakdown.totalPenalty} penalty = ${breakdown.finalScore}`);
|
|
6
|
+
console.log(` ${severityParts(breakdown).join('; ')}`);
|
|
7
|
+
const categories = breakdown.byCategory.filter((entry) => entry.penalty > 0);
|
|
8
|
+
if (categories.length > 0) {
|
|
9
|
+
console.log(` ${chalk.dim('categories:')} ${categories
|
|
10
|
+
.map((entry) => `${entry.category} -${entry.penalty}`)
|
|
11
|
+
.join(', ')}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function severityParts(breakdown) {
|
|
15
|
+
return ['error', 'warning', 'info']
|
|
16
|
+
.map((severity) => {
|
|
17
|
+
const item = breakdown.bySeverity[severity];
|
|
18
|
+
if (item.count === 0)
|
|
19
|
+
return null;
|
|
20
|
+
return `${severity}: ${item.count} x ${item.weight} = -${item.penalty}`;
|
|
21
|
+
})
|
|
22
|
+
.filter((part) => Boolean(part));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=scoreBreakdownReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoreBreakdownReporter.js","sourceRoot":"","sources":["../../src/reporters/scoreBreakdownReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,mBAAmB,CAAC,SAAqC;IACvE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,eAAe,IAAI,CAAC;QAAE,OAAO;IAEzD,OAAO,CAAC,GAAG,CACT,sBAAsB,SAAS,CAAC,SAAS,MAAM,SAAS,CAAC,YAAY,cAAc,SAAS,CAAC,UAAU,EAAE,CAC1G,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE1D,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC7E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,UAAU;aAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;aACrD,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,SAAyB;IAC9C,OAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAW;SAC3C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAChB,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1E,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
package/dist/tool-manifest.json
CHANGED
package/dist/types/analysis.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExportInfo, ImportInfo, Issue } from './common.js';
|
|
1
|
+
import type { ExportInfo, ImportInfo, Issue, IssueSeverity } from './common.js';
|
|
2
2
|
import type { DependencyReport, FrameworkResult, LanguageBreakdown, ScanResult } from './scanning.js';
|
|
3
3
|
export interface FileExplanation {
|
|
4
4
|
filePath: string;
|
|
@@ -29,4 +29,24 @@ export interface HealthScore {
|
|
|
29
29
|
errors: number;
|
|
30
30
|
warnings: number;
|
|
31
31
|
infos: number;
|
|
32
|
+
scoreBreakdown?: ScoreBreakdown;
|
|
33
|
+
}
|
|
34
|
+
export interface ScoreSeverityBreakdown {
|
|
35
|
+
count: number;
|
|
36
|
+
weight: number;
|
|
37
|
+
penalty: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ScoreCategoryBreakdown {
|
|
40
|
+
category: string;
|
|
41
|
+
count: number;
|
|
42
|
+
penalty: number;
|
|
43
|
+
}
|
|
44
|
+
export interface ScoreBreakdown {
|
|
45
|
+
baseScore: number;
|
|
46
|
+
finalScore: number;
|
|
47
|
+
grade: HealthScore['grade'];
|
|
48
|
+
totalPenalty: number;
|
|
49
|
+
uncappedPenalty: number;
|
|
50
|
+
bySeverity: Record<IssueSeverity, ScoreSeverityBreakdown>;
|
|
51
|
+
byCategory: ScoreCategoryBreakdown[];
|
|
32
52
|
}
|
package/dist/types/bugHunt.d.ts
CHANGED
|
@@ -26,11 +26,14 @@ export interface BugHuntReport {
|
|
|
26
26
|
};
|
|
27
27
|
hotspotCount: number;
|
|
28
28
|
preflightVerdict: PreflightVerdict;
|
|
29
|
+
preflightActionableReasonCount?: number;
|
|
30
|
+
preflightIgnoredReasonCount?: number;
|
|
29
31
|
touchedFiles: string[];
|
|
30
32
|
conflicts: number;
|
|
31
33
|
};
|
|
32
34
|
topSuspects: BugHuntFinding[];
|
|
33
35
|
fixQueue: BugHuntFinding[];
|
|
36
|
+
reviewQueue?: BugHuntFinding[];
|
|
34
37
|
fixFirst?: FixFirstRecommendation;
|
|
35
38
|
verificationMatrix: Array<{
|
|
36
39
|
command: string;
|
package/dist/types/config.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { IssueSeverity } from './common.js';
|
|
2
2
|
export type ReportFormat = 'console' | 'json' | 'markdown' | 'sarif' | 'html';
|
|
3
|
+
export type CiFailOnSeverity = IssueSeverity;
|
|
3
4
|
export interface ProjscanConfig {
|
|
4
5
|
minScore?: number;
|
|
6
|
+
failOn?: CiFailOnSeverity;
|
|
5
7
|
baseRef?: string;
|
|
6
8
|
hotspots?: {
|
|
7
9
|
limit?: number;
|
|
@@ -14,6 +16,8 @@ export interface ProjscanConfig {
|
|
|
14
16
|
offline?: boolean;
|
|
15
17
|
};
|
|
16
18
|
disableRules?: string[];
|
|
19
|
+
suppress?: Record<string, string[]>;
|
|
20
|
+
inlineSuppressions?: Record<string, InlineRuleSuppression[]>;
|
|
17
21
|
severityOverrides?: Record<string, IssueSeverity>;
|
|
18
22
|
/**
|
|
19
23
|
* Named evidence-export presets. `analyze`, `doctor`, and `ci` can select
|
|
@@ -43,6 +47,11 @@ export interface ProjscanConfig {
|
|
|
43
47
|
sinks?: string[];
|
|
44
48
|
};
|
|
45
49
|
}
|
|
50
|
+
export interface InlineRuleSuppression {
|
|
51
|
+
line: number;
|
|
52
|
+
rules: string[];
|
|
53
|
+
reason?: string;
|
|
54
|
+
}
|
|
46
55
|
export interface ReportPolicyPreset {
|
|
47
56
|
reportScope?: string[];
|
|
48
57
|
redactPaths?: boolean;
|
package/dist/types/dogfood.d.ts
CHANGED
|
@@ -65,7 +65,7 @@ export interface FeedbackSummaryReport {
|
|
|
65
65
|
};
|
|
66
66
|
nextDogfoodCommand: string;
|
|
67
67
|
}
|
|
68
|
-
export type FeedbackIntakeCategory = 'false_positive' | 'noisy_caution' | 'missing_framework_rule' | 'confusing_docs_output' | 'useful_signal' | 'uncategorized';
|
|
68
|
+
export type FeedbackIntakeCategory = 'false_positive' | 'noisy_caution' | 'install_warning' | 'missing_framework_rule' | 'confusing_docs_output' | 'workflow_focus' | 'useful_signal' | 'uncategorized';
|
|
69
69
|
export type FeedbackIntakeConfidence = 'high' | 'medium' | 'low';
|
|
70
70
|
export interface FeedbackIntakeReport {
|
|
71
71
|
schemaVersion: 1;
|
|
@@ -76,6 +76,10 @@ export interface FeedbackIntakeReport {
|
|
|
76
76
|
taskTitle: string;
|
|
77
77
|
suggestedCommand: string;
|
|
78
78
|
nextCommand: string;
|
|
79
|
+
agentloopTaskCommand: string;
|
|
80
|
+
followUpCommands: string[];
|
|
81
|
+
feedbackSummaryCommand?: string;
|
|
82
|
+
dogfoodCommand?: string;
|
|
79
83
|
feedbackResponse: DogfoodFeedbackResponse;
|
|
80
84
|
appended?: {
|
|
81
85
|
path: string;
|
|
@@ -100,6 +104,14 @@ export interface DogfoodWebsiteProof {
|
|
|
100
104
|
bullets: string[];
|
|
101
105
|
markdown: string;
|
|
102
106
|
}
|
|
107
|
+
export interface DogfoodRepoDiscovery {
|
|
108
|
+
roots: string[];
|
|
109
|
+
candidates: string[];
|
|
110
|
+
selected: string[];
|
|
111
|
+
targetRepoCount: number;
|
|
112
|
+
missingRepoCount: number;
|
|
113
|
+
command: string;
|
|
114
|
+
}
|
|
103
115
|
export interface DogfoodMarketValidation {
|
|
104
116
|
status: 'proven' | 'needs_feedback' | 'needs_more_repos' | 'needs_tuning';
|
|
105
117
|
summary: string;
|
|
@@ -175,6 +187,7 @@ export interface DogfoodRepoResult {
|
|
|
175
187
|
gaps: string[];
|
|
176
188
|
feedbackQuestions: string[];
|
|
177
189
|
validation: DogfoodRepoValidation;
|
|
190
|
+
feedbackCaptureCommand?: string;
|
|
178
191
|
nextCommands: string[];
|
|
179
192
|
}
|
|
180
193
|
export interface DogfoodReport {
|
|
@@ -198,5 +211,6 @@ export interface DogfoodReport {
|
|
|
198
211
|
falsePositiveReports: number;
|
|
199
212
|
};
|
|
200
213
|
marketValidation: DogfoodMarketValidation;
|
|
214
|
+
repoDiscovery?: DogfoodRepoDiscovery;
|
|
201
215
|
suggestedNextActions: PreflightSuggestedAction[];
|
|
202
216
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ExportInfo, ImportInfo, Issue } from './common.js';
|
|
2
2
|
import type { FileHotspot } from './hotspots.js';
|
|
3
|
+
import type { PreflightSuggestedAction } from './preflight.js';
|
|
3
4
|
export interface FileInspection {
|
|
4
5
|
relativePath: string;
|
|
5
6
|
exists: boolean;
|
|
@@ -20,6 +21,8 @@ export interface FileInspection {
|
|
|
20
21
|
fanOut?: number | null;
|
|
21
22
|
/** Adapter id (e.g. 'javascript', 'python'). Set when the graph was available. */
|
|
22
23
|
language?: string;
|
|
24
|
+
/** Concise follow-up commands for the inspected file. */
|
|
25
|
+
suggestedNextActions?: PreflightSuggestedAction[];
|
|
23
26
|
/**
|
|
24
27
|
* Per-function McCabe CC (0.13.0+). Sorted by cyclomaticComplexity desc.
|
|
25
28
|
* Empty array when the file has no functions or the adapter doesn't yet
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CiFailOnSeverity } from '../types/config.js';
|
|
2
|
+
export declare const DEFAULT_CI_FAIL_ON: CiFailOnSeverity;
|
|
3
|
+
export declare const CI_FAIL_ON_VALUES: CiFailOnSeverity[];
|
|
4
|
+
export declare function normalizeCiFailOn(value: unknown): CiFailOnSeverity | undefined;
|
|
5
|
+
export declare function ciFailOnLabel(failOn: CiFailOnSeverity): string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const DEFAULT_CI_FAIL_ON = 'warning';
|
|
2
|
+
export const CI_FAIL_ON_VALUES = ['info', 'warning', 'error'];
|
|
3
|
+
export function normalizeCiFailOn(value) {
|
|
4
|
+
return typeof value === 'string' && isCiFailOnSeverity(value) ? value : undefined;
|
|
5
|
+
}
|
|
6
|
+
export function ciFailOnLabel(failOn) {
|
|
7
|
+
return `${failOn}-or-higher`;
|
|
8
|
+
}
|
|
9
|
+
function isCiFailOnSeverity(value) {
|
|
10
|
+
return CI_FAIL_ON_VALUES.includes(value);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ciFailOn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ciFailOn.js","sourceRoot":"","sources":["../../src/utils/ciFailOn.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAqB,SAAS,CAAC;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAElF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAwB;IACpD,OAAO,GAAG,MAAM,YAAY,CAAC;AAC/B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,KAAyB,CAAC,CAAC;AAC/D,CAAC"}
|
package/dist/utils/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { applyBaseRef, applyDisableRules, applyIgnore, applyMinScore } from './configBasics.js';
|
|
1
|
+
import { applyBaseRef, applyDisableRules, applyFailOn, applyIgnore, applyMinScore, applySuppress, } from './configBasics.js';
|
|
2
2
|
import { applyHotspots } from './configHotspots.js';
|
|
3
3
|
import { applyMonorepo } from './configMonorepo.js';
|
|
4
4
|
import { applyReportPolicies } from './configReportPolicies.js';
|
|
@@ -19,11 +19,13 @@ function normalize(input) {
|
|
|
19
19
|
const obj = input;
|
|
20
20
|
const out = {};
|
|
21
21
|
applyMinScore(obj, out);
|
|
22
|
+
applyFailOn(obj, out);
|
|
22
23
|
applyBaseRef(obj, out);
|
|
23
24
|
applyHotspots(obj, out);
|
|
24
25
|
applyIgnore(obj, out);
|
|
25
26
|
applyScan(obj, out);
|
|
26
27
|
applyDisableRules(obj, out);
|
|
28
|
+
applySuppress(obj, out);
|
|
27
29
|
applySeverityOverrides(obj, out);
|
|
28
30
|
applyReportPolicies(obj, out);
|
|
29
31
|
applyMonorepo(obj, out);
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,YAAqB;IACtE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvB,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ProjscanConfig } from '../types/config.js';
|
|
2
2
|
export declare function applyMinScore(obj: Record<string, unknown>, out: ProjscanConfig): void;
|
|
3
|
+
export declare function applyFailOn(obj: Record<string, unknown>, out: ProjscanConfig): void;
|
|
3
4
|
export declare function applyBaseRef(obj: Record<string, unknown>, out: ProjscanConfig): void;
|
|
4
5
|
export declare function applyIgnore(obj: Record<string, unknown>, out: ProjscanConfig): void;
|
|
5
6
|
export declare function applyDisableRules(obj: Record<string, unknown>, out: ProjscanConfig): void;
|
|
7
|
+
export declare function applySuppress(obj: Record<string, unknown>, out: ProjscanConfig): void;
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
import { normalizeCiFailOn } from './ciFailOn.js';
|
|
1
2
|
export function applyMinScore(obj, out) {
|
|
2
3
|
if (typeof obj.minScore === 'number' && Number.isFinite(obj.minScore)) {
|
|
3
4
|
out.minScore = Math.max(0, Math.min(100, Math.floor(obj.minScore)));
|
|
4
5
|
}
|
|
5
6
|
}
|
|
7
|
+
export function applyFailOn(obj, out) {
|
|
8
|
+
const failOn = normalizeCiFailOn(obj.failOn);
|
|
9
|
+
if (failOn)
|
|
10
|
+
out.failOn = failOn;
|
|
11
|
+
}
|
|
6
12
|
export function applyBaseRef(obj, out) {
|
|
7
13
|
if (typeof obj.baseRef === 'string' && obj.baseRef.trim()) {
|
|
8
14
|
out.baseRef = obj.baseRef.trim();
|
|
@@ -18,4 +24,19 @@ export function applyDisableRules(obj, out) {
|
|
|
18
24
|
return;
|
|
19
25
|
out.disableRules = obj.disableRules.filter((v) => typeof v === 'string' && v.length > 0);
|
|
20
26
|
}
|
|
27
|
+
export function applySuppress(obj, out) {
|
|
28
|
+
if (!obj.suppress || typeof obj.suppress !== 'object' || Array.isArray(obj.suppress))
|
|
29
|
+
return;
|
|
30
|
+
const raw = obj.suppress;
|
|
31
|
+
const suppress = {};
|
|
32
|
+
for (const [rule, value] of Object.entries(raw)) {
|
|
33
|
+
if (!Array.isArray(value))
|
|
34
|
+
continue;
|
|
35
|
+
const patterns = value.filter((v) => typeof v === 'string' && v.length > 0);
|
|
36
|
+
if (patterns.length > 0)
|
|
37
|
+
suppress[rule] = patterns;
|
|
38
|
+
}
|
|
39
|
+
if (Object.keys(suppress).length > 0)
|
|
40
|
+
out.suppress = suppress;
|
|
41
|
+
}
|
|
21
42
|
//# sourceMappingURL=configBasics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configBasics.js","sourceRoot":"","sources":["../../src/utils/configBasics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configBasics.js","sourceRoot":"","sources":["../../src/utils/configBasics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,UAAU,aAAa,CAAC,GAA4B,EAAE,GAAmB;IAC7E,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAA4B,EAAE,GAAmB;IAC3E,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAA4B,EAAE,GAAmB;IAC5E,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAA4B,EAAE,GAAmB;IAC3E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IACvC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAA4B,EAAE,GAAmB;IACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO;IAC7C,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CACxC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAA4B,EAAE,GAAmB;IAC7E,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO;IAC7F,MAAM,GAAG,GAAG,GAAG,CAAC,QAAmC,CAAC;IACpD,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;IACrD,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAChE,CAAC"}
|
|
@@ -8,6 +8,7 @@ export function applyConfigToIssues(issues, config) {
|
|
|
8
8
|
const overrides = config.severityOverrides ?? {};
|
|
9
9
|
return issues
|
|
10
10
|
.filter((issue) => !isRuleDisabled(issue.id, disabled))
|
|
11
|
+
.filter((issue) => !isRuleSuppressed(issue, config))
|
|
11
12
|
.map((issue) => overrides[issue.id] && overrides[issue.id] !== issue.severity
|
|
12
13
|
? { ...issue, severity: overrides[issue.id] }
|
|
13
14
|
: issue);
|
|
@@ -21,4 +22,67 @@ function isRuleDisabled(id, disabled) {
|
|
|
21
22
|
}
|
|
22
23
|
return false;
|
|
23
24
|
}
|
|
25
|
+
function isRuleSuppressed(issue, config) {
|
|
26
|
+
return isSuppressedByConfigMap(issue, config.suppress ?? {}) || isSuppressedInline(issue, config);
|
|
27
|
+
}
|
|
28
|
+
function isSuppressedByConfigMap(issue, suppress) {
|
|
29
|
+
for (const [rule, patterns] of Object.entries(suppress)) {
|
|
30
|
+
if (!matchesRule(issue.id, rule))
|
|
31
|
+
continue;
|
|
32
|
+
if ((issue.locations ?? []).some((location) => matchesAnyPath(location.file, patterns))) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
function isSuppressedInline(issue, config) {
|
|
39
|
+
for (const location of issue.locations ?? []) {
|
|
40
|
+
const entries = config.inlineSuppressions?.[normalizePath(location.file)] ?? [];
|
|
41
|
+
if (entries.some((entry) => entry.line === location.line && entry.rules.some((rule) => matchesRule(issue.id, rule)))) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
function matchesRule(id, rule) {
|
|
48
|
+
if (rule === '*' || rule === id)
|
|
49
|
+
return true;
|
|
50
|
+
return rule.endsWith('*') && id.startsWith(rule.slice(0, -1));
|
|
51
|
+
}
|
|
52
|
+
function matchesAnyPath(file, patterns) {
|
|
53
|
+
const normalized = normalizePath(file);
|
|
54
|
+
return patterns.some((pattern) => matchesPath(normalized, pattern));
|
|
55
|
+
}
|
|
56
|
+
function matchesPath(file, pattern) {
|
|
57
|
+
const normalized = normalizePath(pattern);
|
|
58
|
+
if (file === normalized)
|
|
59
|
+
return true;
|
|
60
|
+
if (!normalized.includes('*'))
|
|
61
|
+
return false;
|
|
62
|
+
return globToRegExp(normalized).test(file);
|
|
63
|
+
}
|
|
64
|
+
function globToRegExp(pattern) {
|
|
65
|
+
let source = '^';
|
|
66
|
+
for (let i = 0; i < pattern.length; i += 1) {
|
|
67
|
+
const char = pattern[i];
|
|
68
|
+
if (char === '*') {
|
|
69
|
+
if (pattern[i + 1] === '*') {
|
|
70
|
+
source += '.*';
|
|
71
|
+
i += 1;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
source += '[^/]*';
|
|
75
|
+
}
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
source += escapeRegExp(char);
|
|
79
|
+
}
|
|
80
|
+
return new RegExp(`${source}$`);
|
|
81
|
+
}
|
|
82
|
+
function normalizePath(value) {
|
|
83
|
+
return value.replace(/\\/g, '/').replace(/^\.\//, '');
|
|
84
|
+
}
|
|
85
|
+
function escapeRegExp(value) {
|
|
86
|
+
return value.replace(/[|\\{}()[\]^$+?.]/g, '\\$&');
|
|
87
|
+
}
|
|
24
88
|
//# sourceMappingURL=configIssueRules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configIssueRules.js","sourceRoot":"","sources":["../../src/utils/configIssueRules.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAe,EAAE,MAAsB;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC;IAEjD,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;SACtD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,QAAQ;QAC3D,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC7C,CAAC,CAAC,KAAK,CACV,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,EAAU,EAAE,QAAkB;IACpD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"configIssueRules.js","sourceRoot":"","sources":["../../src/utils/configIssueRules.ts"],"names":[],"mappings":"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"}
|