@vyuhlabs/dxkit 2.4.5 → 2.4.7
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/CHANGELOG.md +1022 -0
- package/README.md +160 -45
- package/dist/analysis-result.d.ts +112 -0
- package/dist/analysis-result.d.ts.map +1 -0
- package/dist/analysis-result.js +52 -0
- package/dist/analysis-result.js.map +1 -0
- package/dist/analyzers/bom/detailed.d.ts.map +1 -1
- package/dist/analyzers/bom/detailed.js +19 -0
- package/dist/analyzers/bom/detailed.js.map +1 -1
- package/dist/analyzers/bom/gather.d.ts +27 -26
- package/dist/analyzers/bom/gather.d.ts.map +1 -1
- package/dist/analyzers/bom/gather.js +26 -87
- package/dist/analyzers/bom/gather.js.map +1 -1
- package/dist/analyzers/bom/index.d.ts +0 -7
- package/dist/analyzers/bom/index.d.ts.map +1 -1
- package/dist/analyzers/bom/index.js +98 -48
- package/dist/analyzers/bom/index.js.map +1 -1
- package/dist/analyzers/bom/types.d.ts +11 -13
- package/dist/analyzers/bom/types.d.ts.map +1 -1
- package/dist/analyzers/cache.d.ts +95 -0
- package/dist/analyzers/cache.d.ts.map +1 -0
- package/dist/analyzers/cache.js +309 -0
- package/dist/analyzers/cache.js.map +1 -0
- package/dist/analyzers/coverage-runner.d.ts +56 -0
- package/dist/analyzers/coverage-runner.d.ts.map +1 -0
- package/dist/analyzers/coverage-runner.js +72 -0
- package/dist/analyzers/coverage-runner.js.map +1 -0
- package/dist/analyzers/dashboard/index.d.ts +24 -0
- package/dist/analyzers/dashboard/index.d.ts.map +1 -0
- package/dist/analyzers/dashboard/index.js +666 -0
- package/dist/analyzers/dashboard/index.js.map +1 -0
- package/dist/analyzers/developer/gather.d.ts.map +1 -1
- package/dist/analyzers/developer/gather.js +205 -37
- package/dist/analyzers/developer/gather.js.map +1 -1
- package/dist/analyzers/developer/index.d.ts +1 -1
- package/dist/analyzers/developer/index.d.ts.map +1 -1
- package/dist/analyzers/developer/index.js +19 -8
- package/dist/analyzers/developer/index.js.map +1 -1
- package/dist/analyzers/dispatcher.d.ts +37 -0
- package/dist/analyzers/dispatcher.d.ts.map +1 -1
- package/dist/analyzers/dispatcher.js +56 -9
- package/dist/analyzers/dispatcher.js.map +1 -1
- package/dist/analyzers/docs/shallow.d.ts +17 -5
- package/dist/analyzers/docs/shallow.d.ts.map +1 -1
- package/dist/analyzers/docs/shallow.js +65 -2
- package/dist/analyzers/docs/shallow.js.map +1 -1
- package/dist/analyzers/dx/shallow.d.ts +17 -5
- package/dist/analyzers/dx/shallow.d.ts.map +1 -1
- package/dist/analyzers/dx/shallow.js +66 -2
- package/dist/analyzers/dx/shallow.js.map +1 -1
- package/dist/analyzers/health/actions.d.ts +1 -1
- package/dist/analyzers/health/actions.d.ts.map +1 -1
- package/dist/analyzers/health/actions.js +27 -9
- package/dist/analyzers/health/actions.js.map +1 -1
- package/dist/analyzers/health/detailed.d.ts +2 -1
- package/dist/analyzers/health/detailed.d.ts.map +1 -1
- package/dist/analyzers/health/detailed.js +11 -7
- package/dist/analyzers/health/detailed.js.map +1 -1
- package/dist/analyzers/health.d.ts +27 -0
- package/dist/analyzers/health.d.ts.map +1 -1
- package/dist/analyzers/health.js +271 -33
- package/dist/analyzers/health.js.map +1 -1
- package/dist/analyzers/licenses/gather.d.ts +35 -8
- package/dist/analyzers/licenses/gather.d.ts.map +1 -1
- package/dist/analyzers/licenses/gather.js +70 -13
- package/dist/analyzers/licenses/gather.js.map +1 -1
- package/dist/analyzers/licenses/index.d.ts +1 -1
- package/dist/analyzers/licenses/index.d.ts.map +1 -1
- package/dist/analyzers/licenses/index.js +52 -11
- package/dist/analyzers/licenses/index.js.map +1 -1
- package/dist/analyzers/licenses/types.d.ts +15 -0
- package/dist/analyzers/licenses/types.d.ts.map +1 -1
- package/dist/analyzers/maintainability/shallow.d.ts +17 -5
- package/dist/analyzers/maintainability/shallow.d.ts.map +1 -1
- package/dist/analyzers/maintainability/shallow.js +80 -2
- package/dist/analyzers/maintainability/shallow.js.map +1 -1
- package/dist/analyzers/quality/detailed.d.ts.map +1 -1
- package/dist/analyzers/quality/detailed.js +4 -6
- package/dist/analyzers/quality/detailed.js.map +1 -1
- package/dist/analyzers/quality/gather.d.ts +1 -14
- package/dist/analyzers/quality/gather.d.ts.map +1 -1
- package/dist/analyzers/quality/gather.js +48 -137
- package/dist/analyzers/quality/gather.js.map +1 -1
- package/dist/analyzers/quality/index.d.ts +9 -2
- package/dist/analyzers/quality/index.d.ts.map +1 -1
- package/dist/analyzers/quality/index.js +189 -117
- package/dist/analyzers/quality/index.js.map +1 -1
- package/dist/analyzers/quality/shallow.d.ts +50 -5
- package/dist/analyzers/quality/shallow.d.ts.map +1 -1
- package/dist/analyzers/quality/shallow.js +155 -2
- package/dist/analyzers/quality/shallow.js.map +1 -1
- package/dist/analyzers/quality/types.d.ts +14 -0
- package/dist/analyzers/quality/types.d.ts.map +1 -1
- package/dist/analyzers/security/actions.d.ts +11 -4
- package/dist/analyzers/security/actions.d.ts.map +1 -1
- package/dist/analyzers/security/actions.js +87 -37
- package/dist/analyzers/security/actions.js.map +1 -1
- package/dist/analyzers/security/aggregator.d.ts +236 -0
- package/dist/analyzers/security/aggregator.d.ts.map +1 -0
- package/dist/analyzers/security/aggregator.js +347 -0
- package/dist/analyzers/security/aggregator.js.map +1 -0
- package/dist/analyzers/security/detailed.d.ts +2 -2
- package/dist/analyzers/security/detailed.d.ts.map +1 -1
- package/dist/analyzers/security/detailed.js +10 -9
- package/dist/analyzers/security/detailed.js.map +1 -1
- package/dist/analyzers/security/gather.d.ts +103 -1
- package/dist/analyzers/security/gather.d.ts.map +1 -1
- package/dist/analyzers/security/gather.js +281 -9
- package/dist/analyzers/security/gather.js.map +1 -1
- package/dist/analyzers/security/index.d.ts +15 -0
- package/dist/analyzers/security/index.d.ts.map +1 -1
- package/dist/analyzers/security/index.js +463 -50
- package/dist/analyzers/security/index.js.map +1 -1
- package/dist/analyzers/security/shallow.d.ts +50 -6
- package/dist/analyzers/security/shallow.d.ts.map +1 -1
- package/dist/analyzers/security/shallow.js +154 -2
- package/dist/analyzers/security/shallow.js.map +1 -1
- package/dist/analyzers/security/types.d.ts +51 -0
- package/dist/analyzers/security/types.d.ts.map +1 -1
- package/dist/analyzers/tests/detailed.d.ts.map +1 -1
- package/dist/analyzers/tests/detailed.js +2 -3
- package/dist/analyzers/tests/detailed.js.map +1 -1
- package/dist/analyzers/tests/gather.d.ts +2 -1
- package/dist/analyzers/tests/gather.d.ts.map +1 -1
- package/dist/analyzers/tests/gather.js +98 -69
- package/dist/analyzers/tests/gather.js.map +1 -1
- package/dist/analyzers/tests/index.d.ts +11 -2
- package/dist/analyzers/tests/index.d.ts.map +1 -1
- package/dist/analyzers/tests/index.js +85 -18
- package/dist/analyzers/tests/index.js.map +1 -1
- package/dist/analyzers/tests/shallow.d.ts +19 -5
- package/dist/analyzers/tests/shallow.d.ts.map +1 -1
- package/dist/analyzers/tests/shallow.js +89 -2
- package/dist/analyzers/tests/shallow.js.map +1 -1
- package/dist/analyzers/tests/types.d.ts +41 -1
- package/dist/analyzers/tests/types.d.ts.map +1 -1
- package/dist/analyzers/tools/autogen-header.d.ts +8 -0
- package/dist/analyzers/tools/autogen-header.d.ts.map +1 -0
- package/dist/analyzers/tools/autogen-header.js +107 -0
- package/dist/analyzers/tools/autogen-header.js.map +1 -0
- package/dist/analyzers/tools/cloc.d.ts.map +1 -1
- package/dist/analyzers/tools/cloc.js +36 -5
- package/dist/analyzers/tools/cloc.js.map +1 -1
- package/dist/analyzers/tools/coverage.d.ts +1 -1
- package/dist/analyzers/tools/coverage.d.ts.map +1 -1
- package/dist/analyzers/tools/coverage.js.map +1 -1
- package/dist/analyzers/tools/debug-statements.d.ts +17 -0
- package/dist/analyzers/tools/debug-statements.d.ts.map +1 -0
- package/dist/analyzers/tools/debug-statements.js +58 -0
- package/dist/analyzers/tools/debug-statements.js.map +1 -0
- package/dist/analyzers/tools/default-exclusions.gitignore +28 -0
- package/dist/analyzers/tools/exclusions.d.ts +33 -6
- package/dist/analyzers/tools/exclusions.d.ts.map +1 -1
- package/dist/analyzers/tools/exclusions.js +95 -26
- package/dist/analyzers/tools/exclusions.js.map +1 -1
- package/dist/analyzers/tools/generic.d.ts +17 -2
- package/dist/analyzers/tools/generic.d.ts.map +1 -1
- package/dist/analyzers/tools/generic.js +206 -109
- package/dist/analyzers/tools/generic.js.map +1 -1
- package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
- package/dist/analyzers/tools/gitleaks.js +48 -1
- package/dist/analyzers/tools/gitleaks.js.map +1 -1
- package/dist/analyzers/tools/graphify.d.ts +30 -2
- package/dist/analyzers/tools/graphify.d.ts.map +1 -1
- package/dist/analyzers/tools/graphify.js +131 -15
- package/dist/analyzers/tools/graphify.js.map +1 -1
- package/dist/analyzers/tools/jscpd.d.ts +12 -2
- package/dist/analyzers/tools/jscpd.d.ts.map +1 -1
- package/dist/analyzers/tools/jscpd.js +129 -6
- package/dist/analyzers/tools/jscpd.js.map +1 -1
- package/dist/analyzers/tools/minified-detection.d.ts +9 -0
- package/dist/analyzers/tools/minified-detection.d.ts.map +1 -0
- package/dist/analyzers/tools/minified-detection.js +147 -0
- package/dist/analyzers/tools/minified-detection.js.map +1 -0
- package/dist/analyzers/tools/nuget-package-reference.d.ts +131 -0
- package/dist/analyzers/tools/nuget-package-reference.d.ts.map +1 -0
- package/dist/analyzers/tools/nuget-package-reference.js +175 -0
- package/dist/analyzers/tools/nuget-package-reference.js.map +1 -0
- package/dist/analyzers/tools/osv-scanner-deps.d.ts +48 -0
- package/dist/analyzers/tools/osv-scanner-deps.d.ts.map +1 -0
- package/dist/analyzers/tools/{osv-scanner-maven.js → osv-scanner-deps.js} +78 -46
- package/dist/analyzers/tools/osv-scanner-deps.js.map +1 -0
- package/dist/analyzers/tools/osv.d.ts +36 -0
- package/dist/analyzers/tools/osv.d.ts.map +1 -1
- package/dist/analyzers/tools/osv.js +26 -0
- package/dist/analyzers/tools/osv.js.map +1 -1
- package/dist/analyzers/tools/parallel.d.ts +1 -1
- package/dist/analyzers/tools/parallel.d.ts.map +1 -1
- package/dist/analyzers/tools/parallel.js +2 -2
- package/dist/analyzers/tools/parallel.js.map +1 -1
- package/dist/analyzers/tools/risk-score.d.ts +7 -0
- package/dist/analyzers/tools/risk-score.d.ts.map +1 -1
- package/dist/analyzers/tools/risk-score.js +9 -2
- package/dist/analyzers/tools/risk-score.js.map +1 -1
- package/dist/analyzers/tools/run-tests-helper.d.ts +43 -0
- package/dist/analyzers/tools/run-tests-helper.d.ts.map +1 -0
- package/dist/analyzers/tools/run-tests-helper.js +156 -0
- package/dist/analyzers/tools/run-tests-helper.js.map +1 -0
- package/dist/analyzers/tools/runner.d.ts.map +1 -1
- package/dist/analyzers/tools/runner.js +75 -12
- package/dist/analyzers/tools/runner.js.map +1 -1
- package/dist/analyzers/tools/semgrep.d.ts +39 -2
- package/dist/analyzers/tools/semgrep.d.ts.map +1 -1
- package/dist/analyzers/tools/semgrep.js +131 -9
- package/dist/analyzers/tools/semgrep.js.map +1 -1
- package/dist/analyzers/tools/timing.d.ts +17 -3
- package/dist/analyzers/tools/timing.d.ts.map +1 -1
- package/dist/analyzers/tools/timing.js +36 -14
- package/dist/analyzers/tools/timing.js.map +1 -1
- package/dist/analyzers/tools/tool-registry.d.ts +10 -0
- package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +120 -1
- package/dist/analyzers/tools/tool-registry.js.map +1 -1
- package/dist/analyzers/tools/tools-unavailable-prose.d.ts +18 -0
- package/dist/analyzers/tools/tools-unavailable-prose.d.ts.map +1 -0
- package/dist/analyzers/tools/tools-unavailable-prose.js +69 -0
- package/dist/analyzers/tools/tools-unavailable-prose.js.map +1 -0
- package/dist/analyzers/tools/upgrade-plan-resolver.d.ts.map +1 -1
- package/dist/analyzers/tools/upgrade-plan-resolver.js +7 -0
- package/dist/analyzers/tools/upgrade-plan-resolver.js.map +1 -1
- package/dist/analyzers/tools/vendored-advisor.d.ts +43 -0
- package/dist/analyzers/tools/vendored-advisor.d.ts.map +1 -0
- package/dist/analyzers/tools/vendored-advisor.js +107 -0
- package/dist/analyzers/tools/vendored-advisor.js.map +1 -0
- package/dist/analyzers/tools/walk-paths.d.ts +78 -0
- package/dist/analyzers/tools/walk-paths.d.ts.map +1 -0
- package/dist/analyzers/tools/walk-paths.js +150 -0
- package/dist/analyzers/tools/walk-paths.js.map +1 -0
- package/dist/analyzers/tools/walk-source-files.d.ts +70 -0
- package/dist/analyzers/tools/walk-source-files.d.ts.map +1 -0
- package/dist/analyzers/tools/walk-source-files.js +369 -0
- package/dist/analyzers/tools/walk-source-files.js.map +1 -0
- package/dist/analyzers/types.d.ts +204 -4
- package/dist/analyzers/types.d.ts.map +1 -1
- package/dist/analyzers/xlsx/bom.d.ts.map +1 -1
- package/dist/analyzers/xlsx/bom.js +8 -1
- package/dist/analyzers/xlsx/bom.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +557 -189
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +24 -7
- package/dist/detect.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +103 -53
- package/dist/doctor.js.map +1 -1
- package/dist/languages/capabilities/provider.d.ts +130 -1
- package/dist/languages/capabilities/provider.d.ts.map +1 -1
- package/dist/languages/capabilities/types.d.ts +68 -7
- package/dist/languages/capabilities/types.d.ts.map +1 -1
- package/dist/languages/csharp.d.ts +15 -1
- package/dist/languages/csharp.d.ts.map +1 -1
- package/dist/languages/csharp.js +624 -146
- package/dist/languages/csharp.js.map +1 -1
- package/dist/languages/go.d.ts.map +1 -1
- package/dist/languages/go.js +89 -11
- package/dist/languages/go.js.map +1 -1
- package/dist/languages/index.d.ts +131 -2
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +208 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts.map +1 -1
- package/dist/languages/java.js +121 -32
- package/dist/languages/java.js.map +1 -1
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +140 -32
- package/dist/languages/kotlin.js.map +1 -1
- package/dist/languages/python.d.ts.map +1 -1
- package/dist/languages/python.js +149 -44
- package/dist/languages/python.js.map +1 -1
- package/dist/languages/ruby.d.ts +115 -0
- package/dist/languages/ruby.d.ts.map +1 -0
- package/dist/languages/ruby.js +665 -0
- package/dist/languages/ruby.js.map +1 -0
- package/dist/languages/rust.d.ts.map +1 -1
- package/dist/languages/rust.js +103 -16
- package/dist/languages/rust.js.map +1 -1
- package/dist/languages/types.d.ts +228 -5
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript.d.ts.map +1 -1
- package/dist/languages/typescript.js +201 -14
- package/dist/languages/typescript.js.map +1 -1
- package/dist/scoring/dimensions/documentation.d.ts +53 -0
- package/dist/scoring/dimensions/documentation.d.ts.map +1 -0
- package/dist/scoring/dimensions/documentation.js +106 -0
- package/dist/scoring/dimensions/documentation.js.map +1 -0
- package/dist/scoring/dimensions/dx.d.ts +53 -0
- package/dist/scoring/dimensions/dx.d.ts.map +1 -0
- package/dist/scoring/dimensions/dx.js +105 -0
- package/dist/scoring/dimensions/dx.js.map +1 -0
- package/dist/scoring/dimensions/maintainability.d.ts +53 -0
- package/dist/scoring/dimensions/maintainability.d.ts.map +1 -0
- package/dist/scoring/dimensions/maintainability.js +101 -0
- package/dist/scoring/dimensions/maintainability.js.map +1 -0
- package/dist/scoring/dimensions/quality.d.ts +108 -0
- package/dist/scoring/dimensions/quality.d.ts.map +1 -0
- package/dist/scoring/dimensions/quality.js +174 -0
- package/dist/scoring/dimensions/quality.js.map +1 -0
- package/dist/scoring/dimensions/security.d.ts +84 -0
- package/dist/scoring/dimensions/security.d.ts.map +1 -0
- package/dist/scoring/dimensions/security.js +135 -0
- package/dist/scoring/dimensions/security.js.map +1 -0
- package/dist/scoring/dimensions/testing.d.ts +56 -0
- package/dist/scoring/dimensions/testing.d.ts.map +1 -0
- package/dist/scoring/dimensions/testing.js +98 -0
- package/dist/scoring/dimensions/testing.js.map +1 -0
- package/dist/scoring/evaluator.d.ts +27 -0
- package/dist/scoring/evaluator.d.ts.map +1 -0
- package/dist/scoring/evaluator.js +124 -0
- package/dist/scoring/evaluator.js.map +1 -0
- package/dist/scoring/format.d.ts +34 -0
- package/dist/scoring/format.d.ts.map +1 -0
- package/dist/scoring/format.js +63 -0
- package/dist/scoring/format.js.map +1 -0
- package/dist/scoring/index.d.ts +37 -0
- package/dist/scoring/index.d.ts.map +1 -0
- package/dist/scoring/index.js +57 -0
- package/dist/scoring/index.js.map +1 -0
- package/dist/scoring/overall.d.ts +54 -0
- package/dist/scoring/overall.d.ts.map +1 -0
- package/dist/scoring/overall.js +76 -0
- package/dist/scoring/overall.js.map +1 -0
- package/dist/scoring/result.d.ts +111 -0
- package/dist/scoring/result.d.ts.map +1 -0
- package/dist/scoring/result.js +14 -0
- package/dist/scoring/result.js.map +1 -0
- package/dist/scoring/spec.d.ts +76 -0
- package/dist/scoring/spec.d.ts.map +1 -0
- package/dist/scoring/spec.js +22 -0
- package/dist/scoring/spec.js.map +1 -0
- package/dist/scoring/thresholds.d.ts +56 -0
- package/dist/scoring/thresholds.d.ts.map +1 -0
- package/dist/scoring/thresholds.js +75 -0
- package/dist/scoring/thresholds.js.map +1 -0
- package/dist/tools-cli.d.ts.map +1 -1
- package/dist/tools-cli.js +21 -2
- package/dist/tools-cli.js.map +1 -1
- package/dist/types.d.ts +17 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/.claude/commands/dashboard.md +17 -9
- package/templates/.claude/rules/ruby.md +11 -0
- package/templates/configs/ruby/README.md +6 -0
- package/dist/analyzers/scoring.d.ts +0 -49
- package/dist/analyzers/scoring.d.ts.map +0 -1
- package/dist/analyzers/scoring.js +0 -422
- package/dist/analyzers/scoring.js.map +0 -1
- package/dist/analyzers/security/scoring.d.ts +0 -29
- package/dist/analyzers/security/scoring.d.ts.map +0 -1
- package/dist/analyzers/security/scoring.js +0 -40
- package/dist/analyzers/security/scoring.js.map +0 -1
- package/dist/analyzers/tools/osv-scanner-maven.d.ts +0 -42
- package/dist/analyzers/tools/osv-scanner-maven.d.ts.map +0 -1
- package/dist/analyzers/tools/osv-scanner-maven.js.map +0 -1
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.clearWalkCache = clearWalkCache;
|
|
37
|
+
exports.walkSourceFiles = walkSourceFiles;
|
|
38
|
+
exports.countLineMatches = countLineMatches;
|
|
39
|
+
exports.commentSyntaxFor = commentSyntaxFor;
|
|
40
|
+
exports.isCommentLine = isCommentLine;
|
|
41
|
+
exports.packSourceExtensions = packSourceExtensions;
|
|
42
|
+
/**
|
|
43
|
+
* G_v4_7 (2.4.7) — canonical source-file walker + line-match counter.
|
|
44
|
+
*
|
|
45
|
+
* Every consumer that needs "the list of source files in this repo"
|
|
46
|
+
* routes through `walkSourceFiles`. Every consumer that needs "how
|
|
47
|
+
* many lines match pattern P across source files" routes through
|
|
48
|
+
* `countLineMatches`. ONE walker, ONE counter — replaces the four
|
|
49
|
+
* site-specific implementations that were drifting (D075, D079).
|
|
50
|
+
*
|
|
51
|
+
* NEVER shells out. Pre-fix `grep -rEf <pat> --include=*.js .` on
|
|
52
|
+
* web-client produced 67MB of stdout (matched minified .js content)
|
|
53
|
+
* and silently failed with ENOBUFS — `run()`'s 64MB ceiling truncated
|
|
54
|
+
* to empty string, `consoleLogCount` reported 0 when reality was ~1370
|
|
55
|
+
* (D082/D083). Walking the curated set in JS and scanning each file's
|
|
56
|
+
* lines in-process eliminates the maxBuffer ceiling entirely.
|
|
57
|
+
*
|
|
58
|
+
* Filter pipeline (per file encountered):
|
|
59
|
+
* 1. Directory prune at entry: `isExcludedPath(cwd, relDir)` → never descend.
|
|
60
|
+
* 2. Extension filter (default `allSourceExtensions()`).
|
|
61
|
+
* 3. Path-pattern filter: `isExcludedPath(cwd, relPath)`.
|
|
62
|
+
* 4. Autogen basename glob (`*.designer.cs`, `*.pb.go`, …).
|
|
63
|
+
* 5. Autogen header marker (first 2KB).
|
|
64
|
+
* 6. Test-file filter (skip unless `includeTests: true`).
|
|
65
|
+
* 7. Pack scoping (when `opts.packId` set).
|
|
66
|
+
*/
|
|
67
|
+
const fs = __importStar(require("fs"));
|
|
68
|
+
const path = __importStar(require("path"));
|
|
69
|
+
const exclusions_1 = require("./exclusions");
|
|
70
|
+
const autogen_header_1 = require("./autogen-header");
|
|
71
|
+
const minified_detection_1 = require("./minified-detection");
|
|
72
|
+
const languages_1 = require("../../languages");
|
|
73
|
+
/** Cache: one entry per (cwd, opts-fingerprint). Cleared via
|
|
74
|
+
* `clearWalkCache()`. Same memo pattern as `loadExclusions`. */
|
|
75
|
+
const walkCache = new Map();
|
|
76
|
+
function clearWalkCache() {
|
|
77
|
+
walkCache.clear();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Walk the source tree rooted at `cwd` and return relative POSIX paths
|
|
81
|
+
* (no leading `./`) sorted for determinism. Returns `[]` for non-
|
|
82
|
+
* existent or non-directory roots — never throws.
|
|
83
|
+
*/
|
|
84
|
+
function walkSourceFiles(cwd, opts = {}) {
|
|
85
|
+
const resolved = resolveOpts(opts);
|
|
86
|
+
const cacheKey = `${cwd}\0${cacheKeyFor(opts)}`;
|
|
87
|
+
const hit = walkCache.get(cacheKey);
|
|
88
|
+
if (hit)
|
|
89
|
+
return hit;
|
|
90
|
+
const out = [];
|
|
91
|
+
try {
|
|
92
|
+
walkDir(cwd, '', resolved, out);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// I/O error mid-walk: surface what we found so far.
|
|
96
|
+
}
|
|
97
|
+
out.sort();
|
|
98
|
+
walkCache.set(cacheKey, out);
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
function resolveOpts(opts) {
|
|
102
|
+
// Precedence: explicit `extensions` > pack-scoped extensions > all packs.
|
|
103
|
+
let exts;
|
|
104
|
+
if (opts.extensions) {
|
|
105
|
+
exts = opts.extensions;
|
|
106
|
+
}
|
|
107
|
+
else if (opts.packId) {
|
|
108
|
+
exts = (0, languages_1.getLanguage)(opts.packId)?.sourceExtensions ?? [];
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
exts = (0, languages_1.allSourceExtensions)();
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
extensions: new Set(exts.map((e) => (e.startsWith('.') ? e : `.${e}`))),
|
|
115
|
+
includeTests: opts.includeTests ?? false,
|
|
116
|
+
includeAutogen: opts.includeAutogen ?? false,
|
|
117
|
+
respectIgnore: opts.respectIgnore ?? true,
|
|
118
|
+
autogenBasenamePatterns: opts.includeAutogen ? [] : (0, languages_1.allAutogenSourcePatterns)(),
|
|
119
|
+
testFilePatterns: splitTestPatterns((0, languages_1.allTestFilePatterns)()),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function cacheKeyFor(opts) {
|
|
123
|
+
return JSON.stringify([
|
|
124
|
+
opts.extensions ?? null,
|
|
125
|
+
opts.includeTests ?? false,
|
|
126
|
+
opts.includeAutogen ?? false,
|
|
127
|
+
opts.respectIgnore ?? true,
|
|
128
|
+
opts.packId ?? null,
|
|
129
|
+
]);
|
|
130
|
+
}
|
|
131
|
+
function walkDir(cwd, relDir, opts, out) {
|
|
132
|
+
const absDir = relDir ? path.join(cwd, relDir) : cwd;
|
|
133
|
+
let entries;
|
|
134
|
+
try {
|
|
135
|
+
entries = fs.readdirSync(absDir, { withFileTypes: true });
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
for (const ent of entries) {
|
|
141
|
+
const relPath = relDir ? `${relDir}/${ent.name}` : ent.name;
|
|
142
|
+
if (ent.isDirectory()) {
|
|
143
|
+
// Prune at directory boundary so node_modules/ etc. are never
|
|
144
|
+
// descended into. Massive perf win on minified-JS-heavy repos.
|
|
145
|
+
if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
|
|
146
|
+
continue;
|
|
147
|
+
// Skip dot-directories ALWAYS (.git, .vscode, .idea, .dxkit…).
|
|
148
|
+
// These rarely appear in `.gitignore` but are universally noise.
|
|
149
|
+
if (ent.name.startsWith('.'))
|
|
150
|
+
continue;
|
|
151
|
+
walkDir(cwd, relPath, opts, out);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (!ent.isFile())
|
|
155
|
+
continue;
|
|
156
|
+
// Extension gate first (cheap).
|
|
157
|
+
const ext = path.extname(ent.name);
|
|
158
|
+
if (!opts.extensions.has(ext))
|
|
159
|
+
continue;
|
|
160
|
+
// Pack scoping (cheap — done after extension because packId is rare).
|
|
161
|
+
if (opts.respectIgnore && (0, exclusions_1.isExcludedPath)(cwd, relPath))
|
|
162
|
+
continue;
|
|
163
|
+
// Test-file filter.
|
|
164
|
+
if (!opts.includeTests && isTestFile(relPath, ent.name, opts.testFilePatterns))
|
|
165
|
+
continue;
|
|
166
|
+
// Autogen basename glob.
|
|
167
|
+
if (!opts.includeAutogen && matchesAnyBasenameGlob(ent.name, opts.autogenBasenamePatterns)) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
// Autogen header marker (most expensive — reads first 2KB).
|
|
171
|
+
if (!opts.includeAutogen && (0, autogen_header_1.isAutogeneratedByHeader)(path.join(absDir, ent.name)))
|
|
172
|
+
continue;
|
|
173
|
+
// Minified / bundled output detection — catches webpack/vite/esbuild
|
|
174
|
+
// hash-suffixed chunks, CDN-downloaded vendor libs dropped into
|
|
175
|
+
// public/, and pre-minified vendored editors that slip past the
|
|
176
|
+
// standard exclusion list. Same opt-in shape as the autogen
|
|
177
|
+
// checks — `includeAutogen: true` keeps them. Cheap: only fires
|
|
178
|
+
// on .js/.jsx/.mjs/.cjs/.css/.scss/.sass/.less and reads 4KB.
|
|
179
|
+
if (!opts.includeAutogen && (0, minified_detection_1.isLikelyMinified)(path.join(absDir, ent.name)))
|
|
180
|
+
continue;
|
|
181
|
+
out.push(relPath);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function isTestFile(relPath, basename, patterns) {
|
|
185
|
+
for (const pat of patterns.nameOnly) {
|
|
186
|
+
if (matchesBasenameGlob(pat, basename))
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
for (const pat of patterns.pathAnchored) {
|
|
190
|
+
// Path-anchored patterns like `tests/*.rs` — match against the
|
|
191
|
+
// relative path. Convert glob to regex (path-segment aware).
|
|
192
|
+
if (matchesPathGlob(pat, relPath))
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
function matchesAnyBasenameGlob(basename, patterns) {
|
|
198
|
+
for (const pat of patterns) {
|
|
199
|
+
if (matchesBasenameGlob(pat, basename))
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
function matchesBasenameGlob(pat, base) {
|
|
205
|
+
if (!pat.includes('*') && !pat.includes('?'))
|
|
206
|
+
return pat === base;
|
|
207
|
+
const regex = globToRegex(pat, false);
|
|
208
|
+
return regex.test(base);
|
|
209
|
+
}
|
|
210
|
+
function matchesPathGlob(pat, relPath) {
|
|
211
|
+
// `tests/*.rs` should match `tests/foo.rs` AND `crate/tests/foo.rs`
|
|
212
|
+
// (path-anchored "anywhere in tree"). Mirrors find's `-path "*/x"`.
|
|
213
|
+
const regex = globToRegex(pat, true);
|
|
214
|
+
return regex.test(relPath);
|
|
215
|
+
}
|
|
216
|
+
function globToRegex(pat, allowSlash) {
|
|
217
|
+
const star = allowSlash ? '.*' : '[^/]*';
|
|
218
|
+
const body = pat
|
|
219
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
220
|
+
.replace(/\*/g, star)
|
|
221
|
+
.replace(/\?/g, allowSlash ? '.' : '[^/]');
|
|
222
|
+
// Path-anchored: allow optional leading directory segments.
|
|
223
|
+
return new RegExp(allowSlash ? `(?:^|/)${body}$` : `^${body}$`, 'i');
|
|
224
|
+
}
|
|
225
|
+
function splitTestPatterns(patterns) {
|
|
226
|
+
const nameOnly = [];
|
|
227
|
+
const pathAnchored = [];
|
|
228
|
+
for (const p of patterns) {
|
|
229
|
+
if (p.includes('/'))
|
|
230
|
+
pathAnchored.push(p);
|
|
231
|
+
else
|
|
232
|
+
nameOnly.push(p);
|
|
233
|
+
}
|
|
234
|
+
return { nameOnly, pathAnchored };
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Read each file once, scan in-process. Pass `patterns` as compiled
|
|
238
|
+
* regexes for repeated use, or as strings (compiled here with global
|
|
239
|
+
* flag). Each line is tested against the alternation; multiple
|
|
240
|
+
* patterns are unioned via `RegExp` `|` — pass them pre-merged for
|
|
241
|
+
* best performance.
|
|
242
|
+
*/
|
|
243
|
+
function countLineMatches(cwd, files, patterns, opts = {}) {
|
|
244
|
+
const mode = opts.mode ?? 'lines';
|
|
245
|
+
const skipComments = opts.skipComments ?? false;
|
|
246
|
+
const topN = opts.perFileTopN ?? 0;
|
|
247
|
+
const compiled = compilePatterns(patterns);
|
|
248
|
+
if (compiled.length === 0)
|
|
249
|
+
return { lines: 0, files: 0, perFile: [] };
|
|
250
|
+
let totalLines = 0;
|
|
251
|
+
let totalFiles = 0;
|
|
252
|
+
const perFile = [];
|
|
253
|
+
for (const relPath of files) {
|
|
254
|
+
let content;
|
|
255
|
+
try {
|
|
256
|
+
content = fs.readFileSync(path.join(cwd, relPath), 'utf-8');
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
const commentSyntax = skipComments ? commentSyntaxFor(relPath) : null;
|
|
262
|
+
let fileCount = 0;
|
|
263
|
+
for (const rawLine of content.split('\n')) {
|
|
264
|
+
if (commentSyntax && isCommentLine(rawLine, commentSyntax))
|
|
265
|
+
continue;
|
|
266
|
+
let matched = false;
|
|
267
|
+
for (const re of compiled) {
|
|
268
|
+
// Reset lastIndex on `g` flag patterns to avoid stateful skips.
|
|
269
|
+
re.lastIndex = 0;
|
|
270
|
+
if (re.test(rawLine)) {
|
|
271
|
+
matched = true;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (matched)
|
|
276
|
+
fileCount++;
|
|
277
|
+
}
|
|
278
|
+
if (fileCount > 0) {
|
|
279
|
+
totalFiles++;
|
|
280
|
+
totalLines += fileCount;
|
|
281
|
+
if (topN > 0)
|
|
282
|
+
perFile.push({ file: relPath, count: fileCount });
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
let topOffenders = [];
|
|
286
|
+
if (topN > 0) {
|
|
287
|
+
perFile.sort((a, b) => b.count - a.count);
|
|
288
|
+
topOffenders = perFile.slice(0, topN);
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
lines: mode === 'lines' ? totalLines : totalFiles,
|
|
292
|
+
files: totalFiles,
|
|
293
|
+
perFile: topOffenders,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
function compilePatterns(patterns) {
|
|
297
|
+
const out = [];
|
|
298
|
+
for (const p of patterns) {
|
|
299
|
+
if (p instanceof RegExp) {
|
|
300
|
+
out.push(p);
|
|
301
|
+
}
|
|
302
|
+
else if (typeof p === 'string' && p.length > 0) {
|
|
303
|
+
try {
|
|
304
|
+
out.push(new RegExp(p));
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
// Skip un-compilable patterns rather than throwing — matches
|
|
308
|
+
// grep's behaviour of warning and continuing.
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return out;
|
|
313
|
+
}
|
|
314
|
+
function commentSyntaxFor(relPath) {
|
|
315
|
+
const ext = path.extname(relPath).toLowerCase();
|
|
316
|
+
switch (ext) {
|
|
317
|
+
case '.ts':
|
|
318
|
+
case '.tsx':
|
|
319
|
+
case '.js':
|
|
320
|
+
case '.jsx':
|
|
321
|
+
case '.mjs':
|
|
322
|
+
case '.cjs':
|
|
323
|
+
case '.go':
|
|
324
|
+
case '.rs':
|
|
325
|
+
case '.java':
|
|
326
|
+
case '.kt':
|
|
327
|
+
case '.kts':
|
|
328
|
+
case '.cs':
|
|
329
|
+
case '.cpp':
|
|
330
|
+
case '.cxx':
|
|
331
|
+
case '.cc':
|
|
332
|
+
case '.c':
|
|
333
|
+
case '.h':
|
|
334
|
+
case '.hpp':
|
|
335
|
+
case '.swift':
|
|
336
|
+
case '.scala':
|
|
337
|
+
return 'slash';
|
|
338
|
+
case '.py':
|
|
339
|
+
case '.rb':
|
|
340
|
+
case '.sh':
|
|
341
|
+
case '.bash':
|
|
342
|
+
case '.zsh':
|
|
343
|
+
case '.yml':
|
|
344
|
+
case '.yaml':
|
|
345
|
+
case '.toml':
|
|
346
|
+
case '.r':
|
|
347
|
+
return 'hash';
|
|
348
|
+
default:
|
|
349
|
+
return 'none';
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
function isCommentLine(rawLine, syntax) {
|
|
353
|
+
if (syntax === 'none')
|
|
354
|
+
return false;
|
|
355
|
+
const trimmed = rawLine.trimStart();
|
|
356
|
+
if (!trimmed)
|
|
357
|
+
return false;
|
|
358
|
+
if (syntax === 'slash') {
|
|
359
|
+
return trimmed.startsWith('//') || trimmed.startsWith('/*') || trimmed.startsWith('*');
|
|
360
|
+
}
|
|
361
|
+
return trimmed.startsWith('#');
|
|
362
|
+
}
|
|
363
|
+
// ─── Re-exports for test convenience ────────────────────────────────────────
|
|
364
|
+
/** Surface the pack-aware `sourceExtensions` for a given packId. Used
|
|
365
|
+
* when callers want to walk one pack's files but bypass the registry. */
|
|
366
|
+
function packSourceExtensions(packId) {
|
|
367
|
+
return (0, languages_1.getLanguage)(packId)?.sourceExtensions ?? [];
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=walk-source-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-source-files.js","sourceRoot":"","sources":["../../../src/analyzers/tools/walk-source-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
* - Scores come from formulas, not judgment
|
|
7
7
|
* - Tools are layered: always-available (grep/find/git) -> project tools -> optional tools
|
|
8
8
|
*/
|
|
9
|
-
import type { CodePatternsResult, CoverageResult, DepVulnResult, DuplicationResult, ImportsResult, LintResult, SecretsResult, StructuralResult, TestFrameworkResult } from '../languages/capabilities/types';
|
|
9
|
+
import type { CodePatternsResult, CoverageResult, DepVulnResult, DuplicationResult, ImportsResult, LicensesResult, LintResult, SecretsResult, StructuralResult, TestFrameworkResult } from '../languages/capabilities/types';
|
|
10
|
+
import type { CapApplied, Deduction, Rating, TopAction } from '../scoring';
|
|
11
|
+
import type { SecurityAggregate } from './security/aggregator';
|
|
10
12
|
/**
|
|
11
13
|
* Raw metrics gathered by tool runners — the non-capability signals that
|
|
12
14
|
* survive into 2.0. Every capability-owned field (lint, depVulns, coverage,
|
|
@@ -29,6 +31,17 @@ export interface HealthMetrics {
|
|
|
29
31
|
filesOver500Lines: number;
|
|
30
32
|
largestFileLines: number;
|
|
31
33
|
largestFilePath: string;
|
|
34
|
+
/**
|
|
35
|
+
* 2.4.7 — top N largest files by line count, sorted desc. Backing
|
|
36
|
+
* data for the "Top Files by Size" markdown section. Index 0 is the
|
|
37
|
+
* single largest (mirrors `largestFileLines` / `largestFilePath`,
|
|
38
|
+
* kept for back-compat). Capped to top 10 to keep the report
|
|
39
|
+
* compact.
|
|
40
|
+
*/
|
|
41
|
+
largestFiles: Array<{
|
|
42
|
+
path: string;
|
|
43
|
+
lines: number;
|
|
44
|
+
}>;
|
|
32
45
|
consoleLogCount: number;
|
|
33
46
|
anyTypeCount: number;
|
|
34
47
|
readmeLines: number;
|
|
@@ -42,8 +55,37 @@ export interface HealthMetrics {
|
|
|
42
55
|
privateKeyFiles: number;
|
|
43
56
|
envFilesInGit: number;
|
|
44
57
|
tlsDisabledCount: number;
|
|
58
|
+
todoCount: number;
|
|
59
|
+
fixmeCount: number;
|
|
60
|
+
hackCount: number;
|
|
61
|
+
staleFiles: number;
|
|
62
|
+
mixedLanguages: boolean;
|
|
63
|
+
commentRatio: number | null;
|
|
64
|
+
/**
|
|
65
|
+
* Count of source files matching any active language pack's
|
|
66
|
+
* `architecturalShape.primaryComponentPaths`. The name preserves
|
|
67
|
+
* the original "controllers" identifier for schema continuity, but
|
|
68
|
+
* the semantics are broader than HTTP controllers: a React project
|
|
69
|
+
* counts components/pages here; a WinForms project counts Forms
|
|
70
|
+
* and ViewModels; a Spring Boot project counts controllers and
|
|
71
|
+
* services. The label rendered in prose comes from
|
|
72
|
+
* `dominantVocabulary(stack.languages)`.
|
|
73
|
+
*/
|
|
45
74
|
controllers: number;
|
|
75
|
+
/**
|
|
76
|
+
* Count of source files matching any active language pack's
|
|
77
|
+
* `architecturalShape.modelPaths` (ORM entities, DTOs, schemas).
|
|
78
|
+
* Same schema-continuity note as `controllers`.
|
|
79
|
+
*/
|
|
46
80
|
models: number;
|
|
81
|
+
/**
|
|
82
|
+
* Count of source files matching any active language pack's
|
|
83
|
+
* `architecturalShape.routePaths` — the narrower subset of HTTP
|
|
84
|
+
* route handlers / API endpoints. Gates the "Add API documentation"
|
|
85
|
+
* health action: zero on pure-frontend / desktop apps, so the
|
|
86
|
+
* action stays correctly silenced there.
|
|
87
|
+
*/
|
|
88
|
+
routeHandlerFiles: number;
|
|
47
89
|
directories: number;
|
|
48
90
|
languages: Array<{
|
|
49
91
|
name: string;
|
|
@@ -68,13 +110,62 @@ export interface HealthMetrics {
|
|
|
68
110
|
blank: number;
|
|
69
111
|
}> | null;
|
|
70
112
|
}
|
|
71
|
-
/**
|
|
113
|
+
/**
|
|
114
|
+
* Score for a single dimension (0-100).
|
|
115
|
+
*
|
|
116
|
+
* `rating` is the industry-anchored letter grade derived from `score`
|
|
117
|
+
* via uniform thresholds in `src/scoring/thresholds.ts` (A ≥ 80,
|
|
118
|
+
* B ≥ 60, C ≥ 40, D ≥ 20, E < 20). Same boundaries dxkit has always
|
|
119
|
+
* used; the letter replaces the previous descriptive enum so the
|
|
120
|
+
* customer surface is one concept (a letter) rather than three
|
|
121
|
+
* (number + descriptive status + letter elsewhere).
|
|
122
|
+
*
|
|
123
|
+
* Provenance fields (`rawScore`, `rawPenalty`, `methodology`,
|
|
124
|
+
* `deductions`, `capsApplied`, `topActions`) are populated by
|
|
125
|
+
* dimension adapters that have migrated to declarative spec
|
|
126
|
+
* evaluation in `src/scoring/`. Renderers that consume these
|
|
127
|
+
* structures should treat them as optional and degrade gracefully
|
|
128
|
+
* when absent — the migration lands one dimension at a time. After
|
|
129
|
+
* all six dimensions migrate, the optional markers are tightened in
|
|
130
|
+
* `scripts/check-architecture.sh`.
|
|
131
|
+
*/
|
|
72
132
|
export interface DimensionScore {
|
|
73
133
|
score: number;
|
|
74
134
|
maxScore: number;
|
|
75
|
-
|
|
135
|
+
rating: Rating;
|
|
76
136
|
metrics: Record<string, number | string | boolean | null>;
|
|
77
137
|
details: string;
|
|
138
|
+
rawScore?: number;
|
|
139
|
+
rawPenalty?: number;
|
|
140
|
+
methodology?: string;
|
|
141
|
+
deductions?: readonly Deduction[];
|
|
142
|
+
capsApplied?: readonly CapApplied[];
|
|
143
|
+
topActions?: readonly TopAction[];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Bundle of every signal a dimension scorer can read. Health-side
|
|
147
|
+
* adapters (`src/analyzers/<dim>/shallow.ts`) build a `ScoreInput`
|
|
148
|
+
* from gathered data and convert to a per-dimension spec input before
|
|
149
|
+
* calling `evaluateSpec`.
|
|
150
|
+
*
|
|
151
|
+
* Lives here in `types.ts` because `ScoreInput` is the health-side
|
|
152
|
+
* aggregator — it composes `HealthMetrics` (filesystem-derived) +
|
|
153
|
+
* `CapabilityReport` (tool-derived) into one bundle the dimension
|
|
154
|
+
* adapters consume. Not a scoring-system concept; the scoring system
|
|
155
|
+
* receives per-dimension spec inputs (e.g. `SecurityScoreInput`).
|
|
156
|
+
*/
|
|
157
|
+
export interface ScoreInput {
|
|
158
|
+
metrics: HealthMetrics;
|
|
159
|
+
capabilities: CapabilityReport;
|
|
160
|
+
/**
|
|
161
|
+
* Active language flags from the detected stack. Dimension scorers
|
|
162
|
+
* use this to pick per-stack vocabulary for prose (Maintainability)
|
|
163
|
+
* and to gate "Add API documentation" recommendations on real
|
|
164
|
+
* route-handler presence. Optional so legacy fixtures + tests that
|
|
165
|
+
* don't construct a stack still typecheck; consumers fall back to
|
|
166
|
+
* generic words / no per-stack behavior when absent.
|
|
167
|
+
*/
|
|
168
|
+
languageFlags?: import('../types').DetectedStack['languages'];
|
|
78
169
|
}
|
|
79
170
|
/**
|
|
80
171
|
* Aggregated capability envelopes attached to a HealthReport.
|
|
@@ -99,6 +190,97 @@ export interface CapabilityReport {
|
|
|
99
190
|
codePatterns?: CodePatternsResult;
|
|
100
191
|
duplication?: DuplicationResult;
|
|
101
192
|
structural?: StructuralResult;
|
|
193
|
+
/**
|
|
194
|
+
* Per-pack license inventory, aggregated across active language
|
|
195
|
+
* packs. Populated alongside `licensesAvailability` so consumers
|
|
196
|
+
* can distinguish "0 packages, scan ran cleanly" from "0 packages,
|
|
197
|
+
* scanner not installed." The licenses subcommand and the BoM
|
|
198
|
+
* report both read from this single envelope — same canonical
|
|
199
|
+
* source, so cross-report drift on the package list becomes
|
|
200
|
+
* structurally impossible.
|
|
201
|
+
*/
|
|
202
|
+
licenses?: LicensesResult;
|
|
203
|
+
/**
|
|
204
|
+
* Availability metadata for the licenses aggregation. Sibling of
|
|
205
|
+
* `licenses` to match the depVulns shape. `available === false`
|
|
206
|
+
* only when at least one active pack with a licenses provider
|
|
207
|
+
* returned an `'unavailable'` outcome. `'no-manifest'` outcomes do
|
|
208
|
+
* NOT degrade availability — that's a clean "nothing to license"
|
|
209
|
+
* state on polyglot repos where one pack activates but has nothing
|
|
210
|
+
* to scan. `unavailableReason` carries the pack name + reason of
|
|
211
|
+
* the first unavailable outcome for the markdown notice. Empty
|
|
212
|
+
* string when available.
|
|
213
|
+
*/
|
|
214
|
+
licensesAvailability?: {
|
|
215
|
+
available: boolean;
|
|
216
|
+
unavailableReason: string;
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* Availability metadata for the LINT dispatch. Sibling of
|
|
220
|
+
* `lint` so both consumers (health-side scoreQualityDimension +
|
|
221
|
+
* standalone analyzeQuality) can distinguish "no active pack
|
|
222
|
+
* declared a lint capability" (available: true, no envelope —
|
|
223
|
+
* vacuous "clean") from "active packs attempted lint but every
|
|
224
|
+
* provider returned null" (available: false, no envelope —
|
|
225
|
+
* actionable "not run, install deps"). Populated from
|
|
226
|
+
* `gatherWithProvenance.skipped` in the cache builder.
|
|
227
|
+
*/
|
|
228
|
+
lintAvailability?: {
|
|
229
|
+
available: boolean;
|
|
230
|
+
unavailableReason: string;
|
|
231
|
+
};
|
|
232
|
+
/** Availability for CODE_PATTERNS (semgrep). Same shape as
|
|
233
|
+
* lintAvailability — distinguishes "no rulesets active"
|
|
234
|
+
* (vacuous) from "semgrep was attempted but every provider
|
|
235
|
+
* returned null" (actionable; tool may have OOM'd or timed
|
|
236
|
+
* out under parallel load). */
|
|
237
|
+
codePatternsAvailability?: {
|
|
238
|
+
available: boolean;
|
|
239
|
+
unavailableReason: string;
|
|
240
|
+
};
|
|
241
|
+
/** Availability for DUPLICATION (jscpd). Same shape. */
|
|
242
|
+
duplicationAvailability?: {
|
|
243
|
+
available: boolean;
|
|
244
|
+
unavailableReason: string;
|
|
245
|
+
};
|
|
246
|
+
/** Availability for STRUCTURAL (graphify). Same shape. */
|
|
247
|
+
structuralAvailability?: {
|
|
248
|
+
available: boolean;
|
|
249
|
+
unavailableReason: string;
|
|
250
|
+
};
|
|
251
|
+
/**
|
|
252
|
+
* D025b (2.4.7): availability metadata for the depVulns aggregation.
|
|
253
|
+
* Sibling field rather than nested into `depVulns` so the envelope
|
|
254
|
+
* shape stays a clean `DepVulnResult` (matches the other capability
|
|
255
|
+
* fields). `available === false` only when at least one active pack
|
|
256
|
+
* returned an `'unavailable'` outcome (tool missing, no output, parse
|
|
257
|
+
* fail). `no-manifest` outcomes do NOT degrade availability — that's
|
|
258
|
+
* a clean "nothing to scan here" state. `unavailableReason` carries
|
|
259
|
+
* the pack name + reason of the first unavailable outcome for the
|
|
260
|
+
* markdown notice (e.g. "csharp: dotnet list package produced no
|
|
261
|
+
* output (see D036)"). Empty when available.
|
|
262
|
+
*
|
|
263
|
+
* Read by the health-side adapter `toSecurityScoreInput` to set
|
|
264
|
+
* `SecurityScoreInput.depVulnsAvailable`, which the security scorer
|
|
265
|
+
* uses to cap the dimension at 65/100. Populated by
|
|
266
|
+
* `gatherDepVulnsWithAvailability` in `analyzers/security/gather.ts`.
|
|
267
|
+
*/
|
|
268
|
+
depVulnsAvailability?: {
|
|
269
|
+
available: boolean;
|
|
270
|
+
unavailableReason: string;
|
|
271
|
+
};
|
|
272
|
+
/**
|
|
273
|
+
* G_v4_8 (2.4.7 Phase C1): the canonical `SecurityAggregate` built
|
|
274
|
+
* once per analyzer run from every gathered security envelope
|
|
275
|
+
* (secrets, file findings, code patterns, tls-bypass, dep vulns).
|
|
276
|
+
* Health-side scorers (`security/shallow.ts`) read severity buckets
|
|
277
|
+
* from this field — same source the standalone vuln-scan uses,
|
|
278
|
+
* which closes the D086 class of "two consumers disagree on the
|
|
279
|
+
* same metric." Optional so legacy `ScoreInput` fixtures (no
|
|
280
|
+
* health gather pipeline) still typecheck; consumers fall back to
|
|
281
|
+
* the pre-aggregator path when absent.
|
|
282
|
+
*/
|
|
283
|
+
securityAggregate?: SecurityAggregate;
|
|
102
284
|
}
|
|
103
285
|
/** Complete health report. */
|
|
104
286
|
export interface HealthReport {
|
|
@@ -108,7 +290,15 @@ export interface HealthReport {
|
|
|
108
290
|
branch: string;
|
|
109
291
|
summary: {
|
|
110
292
|
overallScore: number;
|
|
111
|
-
|
|
293
|
+
/**
|
|
294
|
+
* Letter rating derived from `overallScore` via the uniform
|
|
295
|
+
* thresholds in `src/scoring/thresholds.ts`. Matches each
|
|
296
|
+
* dimension's `DimensionScore.rating` semantics: A ≥ 80, B ≥ 60,
|
|
297
|
+
* C ≥ 40, D ≥ 20, E < 20. (Pre-2.4.7 this field was named
|
|
298
|
+
* `grade` and used 'F' for failing; unified to 'E' for one
|
|
299
|
+
* consistent letter taxonomy across dimensions + overall.)
|
|
300
|
+
*/
|
|
301
|
+
rating: Rating;
|
|
112
302
|
};
|
|
113
303
|
dimensions: {
|
|
114
304
|
testing: DimensionScore;
|
|
@@ -124,6 +314,16 @@ export interface HealthReport {
|
|
|
124
314
|
lines: number;
|
|
125
315
|
percentage: number;
|
|
126
316
|
}>;
|
|
317
|
+
/**
|
|
318
|
+
* 2.4.7 — top 10 largest source files by line count (post-autogen
|
|
319
|
+
* exclusion). Surfaced verbatim from `HealthMetrics.largestFiles`
|
|
320
|
+
* so consumers (markdown report, dashboard, AI agent) don't have
|
|
321
|
+
* to re-derive. Empty array when no source files were counted.
|
|
322
|
+
*/
|
|
323
|
+
largestFiles: Array<{
|
|
324
|
+
path: string;
|
|
325
|
+
lines: number;
|
|
326
|
+
}>;
|
|
127
327
|
toolsUsed: string[];
|
|
128
328
|
toolsUnavailable: string[];
|
|
129
329
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analyzers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analyzers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAE9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IAEzB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IAQzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B;;;;;;;;;OASG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IAExB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAG3B,aAAa,EAAE,KAAK,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,GAAG,IAAI,CAAC;CACX;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CACnC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,gBAAgB,CAAC;IAC/B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,UAAU,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAC/D;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B;;;;;;;;;;OAUG;IACH,oBAAoB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAEzE;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAErE;;;;oCAIgC;IAChC,wBAAwB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7E,wDAAwD;IACxD,uBAAuB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAE5E,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E;;;;;;;;;;;;;;;;OAgBG;IACH,oBAAoB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAEzE;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,8BAA8B;AAC9B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB;;;;;;;WAOG;QACH,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,EAAE;QACV,OAAO,EAAE,cAAc,CAAC;QACxB,OAAO,EAAE,cAAc,CAAC;QACxB,aAAa,EAAE,cAAc,CAAC;QAC9B,QAAQ,EAAE,cAAc,CAAC;QACzB,eAAe,EAAE,cAAc,CAAC;QAChC,mBAAmB,EAAE,cAAc,CAAC;KACrC,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF;;;;;OAKG;IACH,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bom.d.ts","sourceRoot":"","sources":["../../../src/analyzers/xlsx/bom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAY,SAAS,EAAe,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"bom.d.ts","sourceRoot":"","sources":["../../../src/analyzers/xlsx/bom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAY,SAAS,EAAe,MAAM,cAAc,CAAC;AAqHrE;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlE"}
|