@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
package/dist/analyzers/health.js
CHANGED
|
@@ -36,6 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.defaultMetrics = defaultMetrics;
|
|
37
37
|
exports.analyzeHealthWithMetrics = analyzeHealthWithMetrics;
|
|
38
38
|
exports.analyzeHealth = analyzeHealth;
|
|
39
|
+
exports.gatherAnalysisResultBody = gatherAnalysisResultBody;
|
|
40
|
+
exports.scoreAndFormatHealth = scoreAndFormatHealth;
|
|
39
41
|
/**
|
|
40
42
|
* Health analyzer orchestrator.
|
|
41
43
|
*
|
|
@@ -43,25 +45,34 @@ exports.analyzeHealth = analyzeHealth;
|
|
|
43
45
|
* 2. Run tools -> gather metrics (deterministic)
|
|
44
46
|
* 3. Score metrics -> formulas (deterministic)
|
|
45
47
|
* 4. Format report -> structured JSON
|
|
48
|
+
*
|
|
49
|
+
* Steps 1–2 are wrapped in an `AnalysisResult` and persisted via the
|
|
50
|
+
* cross-process cache (`src/analyzers/cache.ts`). Step 3 + 4 (scoring
|
|
51
|
+
* + formatting) run on every call but read from the cached result;
|
|
52
|
+
* two `vyuh-dxkit health` invocations on the same commit produce
|
|
53
|
+
* byte-identical reports without re-shelling out to any tool.
|
|
46
54
|
*/
|
|
47
55
|
const path = __importStar(require("path"));
|
|
48
56
|
const detect_1 = require("../detect");
|
|
57
|
+
const cache_1 = require("./cache");
|
|
49
58
|
const generic_1 = require("./tools/generic");
|
|
50
59
|
const parallel_1 = require("./tools/parallel");
|
|
51
60
|
const coverage_1 = require("./tools/coverage");
|
|
52
61
|
const package_json_1 = require("./tools/package-json");
|
|
62
|
+
const gather_1 = require("./quality/gather");
|
|
53
63
|
const timing_1 = require("./tools/timing");
|
|
54
64
|
const dispatcher_1 = require("./dispatcher");
|
|
55
65
|
const descriptors_1 = require("../languages/capabilities/descriptors");
|
|
56
66
|
const capabilities_1 = require("../languages/capabilities");
|
|
67
|
+
const gather_2 = require("./security/gather");
|
|
68
|
+
const gather_3 = require("./licenses/gather");
|
|
57
69
|
const shallow_1 = require("./tests/shallow");
|
|
58
70
|
const shallow_2 = require("./quality/shallow");
|
|
59
71
|
const shallow_3 = require("./docs/shallow");
|
|
60
72
|
const shallow_4 = require("./security/shallow");
|
|
61
73
|
const shallow_5 = require("./maintainability/shallow");
|
|
62
74
|
const shallow_6 = require("./dx/shallow");
|
|
63
|
-
const scoring_1 = require("
|
|
64
|
-
const runner_1 = require("./tools/runner");
|
|
75
|
+
const scoring_1 = require("../scoring");
|
|
65
76
|
/** Default values for all HealthMetrics fields. */
|
|
66
77
|
function defaultMetrics() {
|
|
67
78
|
return {
|
|
@@ -76,6 +87,7 @@ function defaultMetrics() {
|
|
|
76
87
|
filesOver500Lines: 0,
|
|
77
88
|
largestFileLines: 0,
|
|
78
89
|
largestFilePath: '',
|
|
90
|
+
largestFiles: [],
|
|
79
91
|
consoleLogCount: 0,
|
|
80
92
|
anyTypeCount: 0,
|
|
81
93
|
readmeExists: false,
|
|
@@ -89,8 +101,15 @@ function defaultMetrics() {
|
|
|
89
101
|
privateKeyFiles: 0,
|
|
90
102
|
envFilesInGit: 0,
|
|
91
103
|
tlsDisabledCount: 0,
|
|
104
|
+
todoCount: 0,
|
|
105
|
+
fixmeCount: 0,
|
|
106
|
+
hackCount: 0,
|
|
107
|
+
staleFiles: 0,
|
|
108
|
+
mixedLanguages: false,
|
|
109
|
+
commentRatio: null,
|
|
92
110
|
controllers: 0,
|
|
93
111
|
models: 0,
|
|
112
|
+
routeHandlerFiles: 0,
|
|
94
113
|
directories: 0,
|
|
95
114
|
languages: [],
|
|
96
115
|
nodeEngineVersion: null,
|
|
@@ -118,15 +137,40 @@ async function analyzeHealth(repoPath, options = {}) {
|
|
|
118
137
|
return (await analyzeHealthInternal(repoPath, options)).report;
|
|
119
138
|
}
|
|
120
139
|
async function analyzeHealthInternal(repoPath, options = {}) {
|
|
140
|
+
const result = await (0, cache_1.readOrBuildAnalysisResult)({
|
|
141
|
+
cwd: repoPath,
|
|
142
|
+
build: (cwd) => gatherAnalysisResultBody(cwd, options),
|
|
143
|
+
});
|
|
144
|
+
const report = scoreAndFormatHealth(result);
|
|
145
|
+
return { report, metrics: result.metrics };
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The gather pipeline — everything that produces an `AnalysisResultBody`
|
|
149
|
+
* for a given repo. Pure with respect to the working tree: same SHA +
|
|
150
|
+
* same `.dxkit-ignore` + same dxkit version means same output. Scoring
|
|
151
|
+
* and formatting are deliberately NOT part of this — they live in
|
|
152
|
+
* `scoreAndFormatHealth` so cache hits skip the tool gather entirely
|
|
153
|
+
* but still re-render the report (cheap, deterministic, decoupled from
|
|
154
|
+
* I/O).
|
|
155
|
+
*
|
|
156
|
+
* Called by the cache layer (`readOrBuildAnalysisResult`) on a miss.
|
|
157
|
+
* Exported so other analyzers can drop into the same pattern in
|
|
158
|
+
* subsequent migrations: each subcommand asks the cache for a
|
|
159
|
+
* `AnalysisResult`, builder is supplied as `gatherAnalysisResultBody`,
|
|
160
|
+
* and the subcommand renders its own report from the body.
|
|
161
|
+
*/
|
|
162
|
+
async function gatherAnalysisResultBody(repoPath, options = {}) {
|
|
121
163
|
const verbose = !!options.verbose;
|
|
122
164
|
// Step 1: Detect stack
|
|
123
165
|
const stack = (0, timing_1.timed)('detect', verbose, () => (0, detect_1.detect)(repoPath));
|
|
124
|
-
// Step 2: Gather metrics -- generic first, then language-specific, then optional
|
|
125
|
-
|
|
166
|
+
// Step 2: Gather metrics -- generic first, then language-specific, then optional.
|
|
167
|
+
// Active-pack flags from `stack` drive the architecturalShape-aware
|
|
168
|
+
// path counters (primary components, route handlers, data models).
|
|
169
|
+
const generic = (0, timing_1.timed)('generic (Layer 0)', verbose, () => (0, generic_1.gatherGenericMetrics)(repoPath, stack.languages));
|
|
126
170
|
const metrics = { ...defaultMetrics(), ...generic };
|
|
127
171
|
// `package.json` metrics: npm-script count + `engines.node` pin. These
|
|
128
172
|
// don't fit any capability (Node-specific by nature) and used to live
|
|
129
|
-
// in the typescript pack's `gatherMetrics` body; extracted
|
|
173
|
+
// in the typescript pack's `gatherMetrics` body; extracted later into
|
|
130
174
|
// a direct helper so they survive the per-pack channel deletion.
|
|
131
175
|
const pkg = (0, timing_1.timed)('package.json', verbose, () => (0, package_json_1.gatherPackageJsonMetrics)(repoPath));
|
|
132
176
|
metrics.npmScriptsCount = pkg.npmScriptsCount;
|
|
@@ -135,8 +179,25 @@ async function analyzeHealthInternal(repoPath, options = {}) {
|
|
|
135
179
|
// counts, graphify AST stats. Reshaped from the dispatcher's cached
|
|
136
180
|
// envelopes (`tools/parallel.ts`), so each tool shells out at most once
|
|
137
181
|
// per analyzer run.
|
|
138
|
-
const layer2 = (0, timing_1.
|
|
182
|
+
const layer2 = await (0, timing_1.timedAsync)('layer2 (parallel)', verbose, () => (0, parallel_1.gatherLayer2Parallel)(repoPath, verbose));
|
|
139
183
|
mergeLayer2(metrics, layer2);
|
|
184
|
+
// Hygiene + comment-ratio metrics shared with the standalone Quality
|
|
185
|
+
// report. Live in HealthMetrics so the canonical Quality scorer
|
|
186
|
+
// sees the same values from both consumer paths — closes the
|
|
187
|
+
// dual-Quality-formula drift class structurally. The standalone
|
|
188
|
+
// analyzeQuality reads these straight off the cached AnalysisResult.
|
|
189
|
+
const hygiene = (0, timing_1.timed)('hygiene (grep)', verbose, () => (0, gather_1.gatherHygieneMarkers)(repoPath));
|
|
190
|
+
metrics.todoCount = hygiene.todoCount;
|
|
191
|
+
metrics.fixmeCount = hygiene.fixmeCount;
|
|
192
|
+
metrics.hackCount = hygiene.hackCount;
|
|
193
|
+
// hygiene.consoleLogCount is intentionally NOT mirrored — Layer 2
|
|
194
|
+
// already populates metrics.consoleLogCount via the shared
|
|
195
|
+
// gatherDebugStatements helper, and both paths converge on the
|
|
196
|
+
// same number by construction.
|
|
197
|
+
metrics.staleFiles = hygiene.staleFiles.length;
|
|
198
|
+
metrics.mixedLanguages = hygiene.mixedLanguages;
|
|
199
|
+
const comments = (0, timing_1.timed)('cloc (comment ratio)', verbose, () => (0, gather_1.gatherCommentRatio)(repoPath));
|
|
200
|
+
metrics.commentRatio = comments.ratio;
|
|
140
201
|
// Surface the coverage tool name in `toolsUsed` even though its data
|
|
141
202
|
// lives under `capabilities.coverage`. `loadCoverage` and the COVERAGE
|
|
142
203
|
// dispatcher share the same underlying providers — the call here is
|
|
@@ -161,22 +222,58 @@ async function analyzeHealthInternal(repoPath, options = {}) {
|
|
|
161
222
|
lang.percentage = Math.round((lang.lines / totalCodeLines) * 100);
|
|
162
223
|
}
|
|
163
224
|
}
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
// bundle (C.2).
|
|
225
|
+
// Capability envelopes alongside legacy metrics. Dispatched in parallel;
|
|
226
|
+
// providers the legacy path already ran are served from the dispatcher
|
|
227
|
+
// cache (free). Scorers read capability-owned fields from this bundle.
|
|
168
228
|
const capabilities = await (0, timing_1.timedAsync)('capabilities', verbose, () => gatherCapabilityReport(repoPath));
|
|
169
229
|
// Synthesize per-pack tool names (eslint, npm-audit, ruff, pip-audit,
|
|
170
230
|
// clippy, cargo-audit, golangci-lint, govulncheck, dotnet-format,
|
|
171
231
|
// dotnet-vulnerable) into `metrics.toolsUsed` from the LINT + DEP_VULNS
|
|
172
|
-
// envelopes.
|
|
173
|
-
//
|
|
232
|
+
// envelopes. Sourced from the dispatcher's already-computed `tool` field
|
|
233
|
+
// rather than each pack's gather body.
|
|
174
234
|
for (const name of toolsFromCapabilities(capabilities)) {
|
|
175
235
|
if (!metrics.toolsUsed.includes(name))
|
|
176
236
|
metrics.toolsUsed.push(name);
|
|
177
237
|
}
|
|
178
|
-
//
|
|
179
|
-
|
|
238
|
+
// Push attempted-but-failed capabilities into metrics.toolsUnavailable
|
|
239
|
+
// so consumers reading the report see the failure honestly rather
|
|
240
|
+
// than as silent absence. Reads from the *Availability sibling
|
|
241
|
+
// fields populated above. The reason text is consumer-renderable;
|
|
242
|
+
// keep it concise (~one short sentence).
|
|
243
|
+
pushUnavailable(metrics, capabilities.codePatternsAvailability, 'semgrep');
|
|
244
|
+
pushUnavailable(metrics, capabilities.duplicationAvailability, 'jscpd');
|
|
245
|
+
pushUnavailable(metrics, capabilities.structuralAvailability, 'graphify');
|
|
246
|
+
pushUnavailable(metrics, capabilities.lintAvailability, 'lint');
|
|
247
|
+
return { stack, capabilities, metrics };
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Append a `<toolName> (<reason>)` entry to `metrics.toolsUnavailable`
|
|
251
|
+
* when an availability sibling reports the capability was attempted
|
|
252
|
+
* but failed. No-ops when the capability is fully clean (available:
|
|
253
|
+
* true) or when the sibling is absent. Deduplicates against any
|
|
254
|
+
* entry already pushed by Layer 2's parallel.ts (which renders
|
|
255
|
+
* gitleaks / graphify failures into the same field).
|
|
256
|
+
*/
|
|
257
|
+
function pushUnavailable(metrics, avail, toolName) {
|
|
258
|
+
if (!avail || avail.available)
|
|
259
|
+
return;
|
|
260
|
+
const entry = avail.unavailableReason ? `${toolName} (${avail.unavailableReason})` : toolName;
|
|
261
|
+
if (!metrics.toolsUnavailable.some((e) => e === entry || e.startsWith(`${toolName} (`))) {
|
|
262
|
+
metrics.toolsUnavailable.push(entry);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Score the six dimensions and format the result into a `HealthReport`.
|
|
267
|
+
* Pure function over a cached `AnalysisResult` — no I/O, no tool
|
|
268
|
+
* shell-outs. Provenance fields (commitSha, branch, analyzedAt) come
|
|
269
|
+
* directly from the cached result, which means two `health` calls on
|
|
270
|
+
* the same commit produce reports with the SAME `analyzedAt`
|
|
271
|
+
* timestamp: it's "when this gather was built," not "when this read
|
|
272
|
+
* happened." That's the cross-process-consistency contract.
|
|
273
|
+
*/
|
|
274
|
+
function scoreAndFormatHealth(result) {
|
|
275
|
+
const { stack, capabilities, metrics } = result;
|
|
276
|
+
const scoreInput = { metrics, capabilities, languageFlags: stack.languages };
|
|
180
277
|
const dimensions = {
|
|
181
278
|
testing: (0, shallow_1.scoreTestsDimension)(scoreInput),
|
|
182
279
|
quality: (0, shallow_2.scoreQualityDimension)(scoreInput),
|
|
@@ -185,23 +282,20 @@ async function analyzeHealthInternal(repoPath, options = {}) {
|
|
|
185
282
|
maintainability: (0, shallow_5.scoreMaintainabilityDimension)(scoreInput),
|
|
186
283
|
developerExperience: (0, shallow_6.scoreDxDimension)(scoreInput),
|
|
187
284
|
};
|
|
188
|
-
const { overallScore,
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
commitSha,
|
|
196
|
-
branch,
|
|
197
|
-
summary: { overallScore, grade },
|
|
285
|
+
const { overallScore, rating } = (0, scoring_1.computeOverall)(dimensions);
|
|
286
|
+
return {
|
|
287
|
+
repo: stack.projectName || path.basename(result.cwd),
|
|
288
|
+
analyzedAt: result.builtAt,
|
|
289
|
+
commitSha: result.commitSha,
|
|
290
|
+
branch: result.branch,
|
|
291
|
+
summary: { overallScore, rating },
|
|
198
292
|
dimensions,
|
|
199
293
|
languages: metrics.languages,
|
|
294
|
+
largestFiles: metrics.largestFiles,
|
|
200
295
|
toolsUsed: metrics.toolsUsed,
|
|
201
296
|
toolsUnavailable: metrics.toolsUnavailable,
|
|
202
297
|
capabilities,
|
|
203
298
|
};
|
|
204
|
-
return { report, metrics };
|
|
205
299
|
}
|
|
206
300
|
/**
|
|
207
301
|
* Extract user-facing tool names from every capability envelope that
|
|
@@ -254,22 +348,104 @@ function splitToolNames(tool) {
|
|
|
254
348
|
* isolates provider failures.
|
|
255
349
|
*/
|
|
256
350
|
async function gatherCapabilityReport(cwd) {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
351
|
+
// D025b (2.4.7): depVulns gathers via `gatherDepVulnsWithAvailability`
|
|
352
|
+
// (NOT the dispatcher) so the per-pack availability discriminant
|
|
353
|
+
// survives to the health-side scorer. Health doesn't need the
|
|
354
|
+
// enrichment passes (EPSS/KEV/reachability/risk) that the standalone
|
|
355
|
+
// vuln scan does — those run on the standalone path inside
|
|
356
|
+
// `gatherDepVulns`. The shared primitive returns the same
|
|
357
|
+
// `DepVulnResult` envelope shape the dispatcher would produce, plus
|
|
358
|
+
// the availability metadata.
|
|
359
|
+
const [depVulnsWithAvail, lintOutcome, coverage, imports, testFramework, secrets, codePatternsOutcome, duplicationOutcome, structuralOutcome, licensesWithAvail,] = await Promise.all([
|
|
360
|
+
(0, gather_2.gatherDepVulnsWithAvailability)(cwd),
|
|
361
|
+
// gatherWithProvenance (not gather) so the cached LintResult.tool
|
|
362
|
+
// can carry the "(not run: <packs>)" suffix when one of the
|
|
363
|
+
// active packs returned null silently. Standalone analyzeQuality
|
|
364
|
+
// reads the augmented label off the cached envelope — closes the
|
|
365
|
+
// cross-process drift class where two surfaces could disagree on
|
|
366
|
+
// whether a linter ran on a given pack.
|
|
367
|
+
dispatcher_1.defaultDispatcher.gatherWithProvenance(cwd, descriptors_1.LINT, (0, capabilities_1.providersFor)(descriptors_1.LINT, cwd)),
|
|
260
368
|
dispatcher_1.defaultDispatcher.gather(cwd, descriptors_1.COVERAGE, (0, capabilities_1.providersFor)(descriptors_1.COVERAGE, cwd)),
|
|
261
369
|
dispatcher_1.defaultDispatcher.gather(cwd, descriptors_1.IMPORTS, (0, capabilities_1.providersFor)(descriptors_1.IMPORTS, cwd)),
|
|
262
370
|
dispatcher_1.defaultDispatcher.gather(cwd, descriptors_1.TEST_FRAMEWORK, (0, capabilities_1.providersFor)(descriptors_1.TEST_FRAMEWORK, cwd)),
|
|
263
371
|
dispatcher_1.defaultDispatcher.gather(cwd, descriptors_1.SECRETS, (0, capabilities_1.providersFor)(descriptors_1.SECRETS, cwd)),
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
372
|
+
// gatherWithProvenance so the cache builder can plumb per-capability
|
|
373
|
+
// availability metadata for tools that may legitimately gather
|
|
374
|
+
// attempted-but-failed (semgrep / jscpd / graphify under resource
|
|
375
|
+
// contention; tool not installed; etc.). Without this the cache's
|
|
376
|
+
// metrics.toolsUnavailable can't distinguish "tool didn't try" from
|
|
377
|
+
// "tool tried and failed silently" — the same dishonest-rendering
|
|
378
|
+
// class as the lint case the LINT switch above closes.
|
|
379
|
+
dispatcher_1.defaultDispatcher.gatherWithProvenance(cwd, descriptors_1.CODE_PATTERNS, (0, capabilities_1.providersFor)(descriptors_1.CODE_PATTERNS, cwd)),
|
|
380
|
+
dispatcher_1.defaultDispatcher.gatherWithProvenance(cwd, descriptors_1.DUPLICATION, (0, capabilities_1.providersFor)(descriptors_1.DUPLICATION, cwd)),
|
|
381
|
+
dispatcher_1.defaultDispatcher.gatherWithProvenance(cwd, descriptors_1.STRUCTURAL, (0, capabilities_1.providersFor)(descriptors_1.STRUCTURAL, cwd)),
|
|
382
|
+
(0, gather_3.gatherLicensesWithAvailability)(cwd),
|
|
267
383
|
]);
|
|
384
|
+
const codePatterns = codePatternsOutcome.envelope;
|
|
385
|
+
const duplication = duplicationOutcome.envelope;
|
|
386
|
+
const structural = structuralOutcome.envelope;
|
|
268
387
|
const report = {};
|
|
269
|
-
if (
|
|
270
|
-
report.depVulns =
|
|
388
|
+
if (depVulnsWithAvail.envelope)
|
|
389
|
+
report.depVulns = depVulnsWithAvail.envelope;
|
|
390
|
+
// Always plumb availability — even when envelope is null, the bool
|
|
391
|
+
// disambiguates "no active pack" (available=true, no cap) from
|
|
392
|
+
// "active pack returned unavailable" (available=false, cap fires).
|
|
393
|
+
report.depVulnsAvailability = {
|
|
394
|
+
available: depVulnsWithAvail.available,
|
|
395
|
+
unavailableReason: depVulnsWithAvail.unavailableReason,
|
|
396
|
+
};
|
|
397
|
+
// Augment the lint envelope's tool label with skipped-pack
|
|
398
|
+
// provenance before caching, so consumers see the same label
|
|
399
|
+
// analyzeQuality's old standalone gather produced. Reconstructed
|
|
400
|
+
// (not mutated) because envelope.tool is readonly.
|
|
401
|
+
//
|
|
402
|
+
// When `skipReasons` carries a per-pack reason (the typescript +
|
|
403
|
+
// python lint providers expose `gatherOutcome` for exactly this),
|
|
404
|
+
// the label includes it so customers can act on the disclosure
|
|
405
|
+
// instead of being told "typescript lint not run" with no
|
|
406
|
+
// explanation. Example post-fix label on a platform-style polyglot:
|
|
407
|
+
// `ruff (not run: typescript — no eslint config found)`
|
|
408
|
+
const lint = (() => {
|
|
409
|
+
if (!lintOutcome.envelope || lintOutcome.skipped.length === 0) {
|
|
410
|
+
return lintOutcome.envelope;
|
|
411
|
+
}
|
|
412
|
+
const annotated = lintOutcome.skipped
|
|
413
|
+
.map((src) => {
|
|
414
|
+
const reason = lintOutcome.skipReasons[src];
|
|
415
|
+
return reason ? `${src} — ${reason}` : src;
|
|
416
|
+
})
|
|
417
|
+
.join(', ');
|
|
418
|
+
return {
|
|
419
|
+
...lintOutcome.envelope,
|
|
420
|
+
tool: `${lintOutcome.envelope.tool} (not run: ${annotated})`,
|
|
421
|
+
};
|
|
422
|
+
})();
|
|
271
423
|
if (lint)
|
|
272
424
|
report.lint = lint;
|
|
425
|
+
// Lint availability so consumers can distinguish "no active
|
|
426
|
+
// lint-capable pack" (vacuous clean, available=true, no envelope)
|
|
427
|
+
// from "every active provider returned null" (available=false —
|
|
428
|
+
// actionable "try installing dependencies"). Same shape as
|
|
429
|
+
// licensesAvailability + depVulnsAvailability.
|
|
430
|
+
if (lintOutcome.attempted.length > 0 && lintOutcome.succeeded.length === 0) {
|
|
431
|
+
// Every attempted provider returned null — surface the per-pack
|
|
432
|
+
// reasons (when available via `gatherOutcome`) so the customer
|
|
433
|
+
// sees what to fix, not just which packs gave up.
|
|
434
|
+
const annotated = lintOutcome.attempted
|
|
435
|
+
.map((src) => {
|
|
436
|
+
const reason = lintOutcome.skipReasons[src];
|
|
437
|
+
return reason ? `${src} — ${reason}` : src;
|
|
438
|
+
})
|
|
439
|
+
.join('; ');
|
|
440
|
+
const pluralS = lintOutcome.attempted.length === 1 ? '' : 's';
|
|
441
|
+
report.lintAvailability = {
|
|
442
|
+
available: false,
|
|
443
|
+
unavailableReason: `provider${pluralS} returned no data: ${annotated}`,
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
report.lintAvailability = { available: true, unavailableReason: '' };
|
|
448
|
+
}
|
|
273
449
|
if (coverage)
|
|
274
450
|
report.coverage = coverage;
|
|
275
451
|
if (imports)
|
|
@@ -280,12 +456,74 @@ async function gatherCapabilityReport(cwd) {
|
|
|
280
456
|
report.secrets = secrets;
|
|
281
457
|
if (codePatterns)
|
|
282
458
|
report.codePatterns = codePatterns;
|
|
459
|
+
// Same shape as lintAvailability — distinguishes "no rulesets
|
|
460
|
+
// active" (vacuous clean) from "semgrep/jscpd/graphify was
|
|
461
|
+
// attempted but every provider returned null" (actionable —
|
|
462
|
+
// the customer's report shouldn't silently miss the tool).
|
|
463
|
+
report.codePatternsAvailability = availabilityFromOutcome(codePatternsOutcome, 'semgrep');
|
|
283
464
|
if (duplication)
|
|
284
465
|
report.duplication = duplication;
|
|
466
|
+
report.duplicationAvailability = availabilityFromOutcome(duplicationOutcome, 'jscpd');
|
|
285
467
|
if (structural)
|
|
286
468
|
report.structural = structural;
|
|
469
|
+
report.structuralAvailability = availabilityFromOutcome(structuralOutcome, 'graphify');
|
|
470
|
+
if (licensesWithAvail.envelope)
|
|
471
|
+
report.licenses = licensesWithAvail.envelope;
|
|
472
|
+
// Always plumb availability — even when envelope is null, the bool
|
|
473
|
+
// disambiguates "no active pack with a licenses provider" (vacuous
|
|
474
|
+
// success) from "active pack returned unavailable" (banner fires).
|
|
475
|
+
report.licensesAvailability = {
|
|
476
|
+
available: licensesWithAvail.available,
|
|
477
|
+
unavailableReason: licensesWithAvail.unavailableReason,
|
|
478
|
+
};
|
|
479
|
+
// G_v4_8 (C1.3): build the canonical aggregate from everything we
|
|
480
|
+
// just gathered, plus the two security finders not represented in
|
|
481
|
+
// the capability layer (tls-bypass-registry walk, file findings).
|
|
482
|
+
// Stored on the CapabilityReport so dimension scorers — currently
|
|
483
|
+
// `security/shallow.ts` — read the SAME aggregate the standalone
|
|
484
|
+
// vuln-scan reads. Closes the D086 class of cross-consumer drift
|
|
485
|
+
// by construction.
|
|
486
|
+
report.securityAggregate = await (0, gather_2.buildSecurityAggregateForHealth)(cwd, secrets ?? undefined, codePatterns ?? undefined, depVulnsWithAvail.envelope ?? undefined, depVulnsWithAvail.available, depVulnsWithAvail.unavailableReason);
|
|
287
487
|
return report;
|
|
288
488
|
}
|
|
489
|
+
/**
|
|
490
|
+
* Derive `<cap>Availability` metadata from a gatherWithProvenance
|
|
491
|
+
* outcome. Mirrors the depVulnsAvailability / licensesAvailability
|
|
492
|
+
* pattern: `available === false` only when at least one provider was
|
|
493
|
+
* attempted AND none succeeded (i.e. tried + failed silently).
|
|
494
|
+
* Empty `attempted` list reports available: true (vacuous — nothing
|
|
495
|
+
* to try, nothing to fail).
|
|
496
|
+
*/
|
|
497
|
+
function availabilityFromOutcome(outcome, _toolLabel) {
|
|
498
|
+
if (outcome.attempted.length === 0) {
|
|
499
|
+
return { available: true, unavailableReason: '' };
|
|
500
|
+
}
|
|
501
|
+
if (outcome.succeeded.length > 0) {
|
|
502
|
+
return { available: true, unavailableReason: '' };
|
|
503
|
+
}
|
|
504
|
+
// Prefer the per-source reason from the dispatcher's skipReasons map
|
|
505
|
+
// when present — that channel carries the tool's actual failure mode
|
|
506
|
+
// (`not installed` / `timed out at 600s` / `exit code 137 (stderr: ...)`
|
|
507
|
+
// / `no output` / `parse error`). Falls back to the generic prose for
|
|
508
|
+
// legacy providers without a `gatherOutcome` method, which collapse
|
|
509
|
+
// every failure to "null returned from gather()" with no reason text.
|
|
510
|
+
//
|
|
511
|
+
// The reason intentionally omits the tool name — pushUnavailable
|
|
512
|
+
// prepends it as `<tool> (<reason>)`, so duplicating the name here
|
|
513
|
+
// would render as `jscpd (jscpd attempted ...)`.
|
|
514
|
+
const skipReasons = outcome.skipReasons ?? {};
|
|
515
|
+
const firstSkipWithReason = outcome.skipped.find((s) => skipReasons[s]);
|
|
516
|
+
if (firstSkipWithReason) {
|
|
517
|
+
return {
|
|
518
|
+
available: false,
|
|
519
|
+
unavailableReason: skipReasons[firstSkipWithReason],
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
return {
|
|
523
|
+
available: false,
|
|
524
|
+
unavailableReason: 'attempted but produced no output (likely killed by resource limits — try running dxkit on this repo alone)',
|
|
525
|
+
};
|
|
526
|
+
}
|
|
289
527
|
/**
|
|
290
528
|
* Merge `gatherLayer2Parallel` output (cloc + gitleaks + graphify reshape)
|
|
291
529
|
* into the accumulator. Layer 2 only writes non-capability fields and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/analyzers/health.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,wCAyCC;AAaD,4DAKC;AAGD,sCAKC;AA3GD;;;;;;;GAOG;AACH,2CAA6B;AAC7B,sCAAmC;AAGnC,6CAAuD;AACvD,+CAAwD;AACxD,+CAAgD;AAChD,uDAAgE;AAChE,2CAAmD;AACnD,6CAAiD;AACjD,uEAU+C;AAC/C,4DAAyD;AACzD,6CAAsD;AACtD,+CAA0D;AAC1D,4CAAoD;AACpD,gDAA4D;AAC5D,uDAA0E;AAC1E,0CAAgD;AAChD,uCAAuD;AACvD,2CAAqC;AAErC,mDAAmD;AACnD,SAAgB,cAAc;IAC5B,OAAO;QACL,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE,IAAI;QAChB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,CAAC;QACnB,eAAe,EAAE,EAAE;QACnB,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,KAAK;QACnB,qBAAqB,EAAE,KAAK;QAC5B,kBAAkB,EAAE,KAAK;QACzB,eAAe,EAAE,KAAK;QACtB,SAAS,EAAE,CAAC;QACZ,eAAe,EAAE,CAAC;QAClB,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,WAAW,EAAE,CAAC;QACd,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,EAAE;QACb,iBAAiB,EAAE,IAAI;QACvB,aAAa,EAAE,CAAC;QAChB,iBAAiB,EAAE,CAAC;QACpB,oBAAoB,EAAE,CAAC;QACvB,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,KAAK;QACvB,eAAe,EAAE,CAAC;QAClB,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,EAAE;QACpB,aAAa,EAAE,IAAI;KACpB,CAAC;AACJ,CAAC;AAQD;;;;GAIG;AACI,KAAK,UAAU,wBAAwB,CAC5C,QAAgB,EAChB,UAAgC,EAAE;IAElC,OAAO,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,kDAAkD;AAC3C,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,UAAgC,EAAE;IAElC,OAAO,CAAC,MAAM,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,QAAgB,EAChB,UAAgC,EAAE;IAElC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAElC,uBAAuB;IACvB,MAAM,KAAK,GAAG,IAAA,cAAK,EAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,CAAC;IAE/D,iFAAiF;IACjF,MAAM,OAAO,GAAG,IAAA,cAAK,EAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAA,8BAAoB,EAAC,QAAQ,CAAC,CAAC,CAAC;IAC1F,MAAM,OAAO,GAAkB,EAAE,GAAG,cAAc,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC;IAEnE,uEAAuE;IACvE,sEAAsE;IACtE,uEAAuE;IACvE,iEAAiE;IACjE,MAAM,GAAG,GAAG,IAAA,cAAK,EAAC,cAAc,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAA,uCAAwB,EAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC;IAC9C,OAAO,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC;IAElD,uEAAuE;IACvE,oEAAoE;IACpE,wEAAwE;IACxE,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAA,cAAK,EAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAA,+BAAoB,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAClG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE7B,qEAAqE;IACrE,uEAAuE;IACvE,oEAAoE;IACpE,uEAAuE;IACvE,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAU,EAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAY,EAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,iEAAiE;IACjE,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,aAAa;QACvC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,CAAC,QAAQ;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,IAAI;YACb,UAAU,EAAE,CAAC,EAAE,iBAAiB;SACjC,CAAC,CAAC;QACL,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAElC,uCAAuC;IACvC,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9E,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,gBAAgB;IAChB,MAAM,YAAY,GAAG,MAAM,IAAA,mBAAU,EAAC,cAAc,EAAE,OAAO,EAAE,GAAG,EAAE,CAClE,sBAAsB,CAAC,QAAQ,CAAC,CACjC,CAAC;IAEF,sEAAsE;IACtE,kEAAkE;IAClE,wEAAwE;IACxE,sEAAsE;IACtE,iEAAiE;IACjE,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,YAAY,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,gBAAgB;IAChB,MAAM,UAAU,GAAe,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACzD,MAAM,UAAU,GAAG;QACjB,OAAO,EAAE,IAAA,6BAAmB,EAAC,UAAU,CAAC;QACxC,OAAO,EAAE,IAAA,+BAAqB,EAAC,UAAU,CAAC;QAC1C,aAAa,EAAE,IAAA,4BAAkB,EAAC,UAAU,CAAC;QAC7C,QAAQ,EAAE,IAAA,gCAAsB,EAAC,UAAU,CAAC;QAC5C,eAAe,EAAE,IAAA,uCAA6B,EAAC,UAAU,CAAC;QAC1D,mBAAmB,EAAE,IAAA,0BAAgB,EAAC,UAAU,CAAC;KAClD,CAAC;IACF,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,IAAA,wBAAc,EAAC,UAAU,CAAC,CAAC;IAE3D,wBAAwB;IACxB,MAAM,SAAS,GAAG,IAAA,YAAG,EAAC,wCAAwC,EAAE,QAAQ,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAA,YAAG,EAAC,6CAA6C,EAAE,QAAQ,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAiB;QAC3B,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAClD,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,SAAS;QACT,MAAM;QACN,OAAO,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;QAChC,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,YAAY;KACb,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,qBAAqB,CAAC,IAAsB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,IAAI,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,IAAI,IAAI,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,IAAI,IAAI,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,sBAAsB,CAAC,GAAW;IAC/C,MAAM,CACJ,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,aAAa,EACb,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAU,EACX,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpB,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,uBAAS,EAAE,IAAA,2BAAY,EAAC,uBAAS,EAAE,GAAG,CAAC,CAAC;QACtE,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAI,EAAE,IAAA,2BAAY,EAAC,kBAAI,EAAE,GAAG,CAAC,CAAC;QAC5D,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,sBAAQ,EAAE,IAAA,2BAAY,EAAC,sBAAQ,EAAE,GAAG,CAAC,CAAC;QACpE,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,qBAAO,EAAE,IAAA,2BAAY,EAAC,qBAAO,EAAE,GAAG,CAAC,CAAC;QAClE,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,4BAAc,EAAE,IAAA,2BAAY,EAAC,4BAAc,EAAE,GAAG,CAAC,CAAC;QAChF,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,qBAAO,EAAE,IAAA,2BAAY,EAAC,qBAAO,EAAE,GAAG,CAAC,CAAC;QAClE,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,2BAAa,EAAE,IAAA,2BAAY,EAAC,2BAAa,EAAE,GAAG,CAAC,CAAC;QAC9E,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,yBAAW,EAAE,IAAA,2BAAY,EAAC,yBAAW,EAAE,GAAG,CAAC,CAAC;QAC1E,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,wBAAU,EAAE,IAAA,2BAAY,EAAC,wBAAU,EAAE,GAAG,CAAC,CAAC;KACzE,CAAC,CAAC;IACH,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzC,IAAI,IAAI;QAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IAC7B,IAAI,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzC,IAAI,OAAO;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACtC,IAAI,aAAa;QAAE,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;IACxD,IAAI,OAAO;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACtC,IAAI,YAAY;QAAE,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IACrD,IAAI,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IAClD,IAAI,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,IAAmB,EAAE,OAA+B;IACvE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QACpD,IAAI,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAI,KAAkB,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,GAAG,KAAK,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAI,KAAkB,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,8DAA8D;YAC7D,IAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,SAAS,sBAAsB,CAC7B,KAAoB;IAEpB,MAAM,KAAK,GAA8E,EAAE,CAAC;IAC5F,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEtE,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;IAC5B,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/analyzers/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Licenses analyzer data-gather
|
|
3
|
-
*
|
|
4
|
-
* `
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* Licenses analyzer data-gather. D031 (2.4.7): mirrors the D025b
|
|
3
|
+
* pattern for dep-vulns — bypasses the dispatcher cache to harvest
|
|
4
|
+
* per-pack `LicensesGatherOutcome` discriminants. The dispatcher's
|
|
5
|
+
* `gather()` collapses every non-success outcome to null, which
|
|
6
|
+
* makes the licenses report unable to differentiate "0 packages —
|
|
7
|
+
* scan ran cleanly" from "0 packages — tool not installed" (the F12
|
|
8
|
+
* dpl-studio customer-credibility class).
|
|
9
|
+
*
|
|
10
|
+
* Per-pack helpers live in `src/languages/{typescript,python,go,
|
|
11
|
+
* rust,csharp}.ts` (kotlin/java/ruby don't declare a licenses
|
|
12
|
+
* capability — no canonical CLI license tool for those ecosystems
|
|
13
|
+
* yet). Each pack's `LicensesProvider.gatherOutcome` returns the
|
|
14
|
+
* discriminant; we aggregate success envelopes via the existing
|
|
15
|
+
* LICENSES descriptor + track first-unavailable for the framing
|
|
16
|
+
* notice.
|
|
7
17
|
*/
|
|
8
18
|
import type { LicensesResult } from '../../languages/capabilities/types';
|
|
9
19
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
20
|
+
* Shared primitive for availability-aware licenses aggregation. Used
|
|
21
|
+
* by both the standalone licenses analyzer and the BoM report.
|
|
22
|
+
*
|
|
23
|
+
* `envelope` is null only when NO pack contributed a success outcome.
|
|
24
|
+
* `available` is false when at least one active pack with a licenses
|
|
25
|
+
* provider returned `'unavailable'`. `'no-manifest'` outcomes do NOT
|
|
26
|
+
* degrade availability — polyglot repos where one pack activates but
|
|
27
|
+
* has nothing to license (e.g. python pack on a Python-tooling-only
|
|
28
|
+
* repo with no `requirements.txt`) are clean "nothing to license."
|
|
29
|
+
*/
|
|
30
|
+
export declare function gatherLicensesWithAvailability(cwd: string): Promise<{
|
|
31
|
+
envelope: LicensesResult | null;
|
|
32
|
+
available: boolean;
|
|
33
|
+
unavailableReason: string;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Legacy entry point — preserved for callers that don't need the
|
|
37
|
+
* availability metadata. New callers should use
|
|
38
|
+
* `gatherLicensesWithAvailability` directly so the framing notice
|
|
39
|
+
* + degraded-inventory fallback paths can engage.
|
|
13
40
|
*/
|
|
14
41
|
export declare function gatherLicensesResult(cwd: string): Promise<LicensesResult | null>;
|
|
15
42
|
//# sourceMappingURL=gather.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gather.d.ts","sourceRoot":"","sources":["../../../src/analyzers/licenses/gather.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"gather.d.ts","sourceRoot":"","sources":["../../../src/analyzers/licenses/gather.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,wBAAsB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACzE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC,CAuCD;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAGtF"}
|
|
@@ -1,24 +1,81 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Licenses analyzer data-gather
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
6
|
-
*
|
|
7
|
-
*
|
|
3
|
+
* Licenses analyzer data-gather. D031 (2.4.7): mirrors the D025b
|
|
4
|
+
* pattern for dep-vulns — bypasses the dispatcher cache to harvest
|
|
5
|
+
* per-pack `LicensesGatherOutcome` discriminants. The dispatcher's
|
|
6
|
+
* `gather()` collapses every non-success outcome to null, which
|
|
7
|
+
* makes the licenses report unable to differentiate "0 packages —
|
|
8
|
+
* scan ran cleanly" from "0 packages — tool not installed" (the F12
|
|
9
|
+
* dpl-studio customer-credibility class).
|
|
10
|
+
*
|
|
11
|
+
* Per-pack helpers live in `src/languages/{typescript,python,go,
|
|
12
|
+
* rust,csharp}.ts` (kotlin/java/ruby don't declare a licenses
|
|
13
|
+
* capability — no canonical CLI license tool for those ecosystems
|
|
14
|
+
* yet). Each pack's `LicensesProvider.gatherOutcome` returns the
|
|
15
|
+
* discriminant; we aggregate success envelopes via the existing
|
|
16
|
+
* LICENSES descriptor + track first-unavailable for the framing
|
|
17
|
+
* notice.
|
|
8
18
|
*/
|
|
9
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.gatherLicensesWithAvailability = gatherLicensesWithAvailability;
|
|
10
21
|
exports.gatherLicensesResult = gatherLicensesResult;
|
|
11
|
-
const
|
|
22
|
+
const languages_1 = require("../../languages");
|
|
12
23
|
const descriptors_1 = require("../../languages/capabilities/descriptors");
|
|
13
|
-
const capabilities_1 = require("../../languages/capabilities");
|
|
14
24
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
25
|
+
* Shared primitive for availability-aware licenses aggregation. Used
|
|
26
|
+
* by both the standalone licenses analyzer and the BoM report.
|
|
27
|
+
*
|
|
28
|
+
* `envelope` is null only when NO pack contributed a success outcome.
|
|
29
|
+
* `available` is false when at least one active pack with a licenses
|
|
30
|
+
* provider returned `'unavailable'`. `'no-manifest'` outcomes do NOT
|
|
31
|
+
* degrade availability — polyglot repos where one pack activates but
|
|
32
|
+
* has nothing to license (e.g. python pack on a Python-tooling-only
|
|
33
|
+
* repo with no `requirements.txt`) are clean "nothing to license."
|
|
34
|
+
*/
|
|
35
|
+
async function gatherLicensesWithAvailability(cwd) {
|
|
36
|
+
const activePacks = (0, languages_1.detectActiveLanguages)(cwd).filter((l) => l.capabilities?.licenses);
|
|
37
|
+
if (activePacks.length === 0) {
|
|
38
|
+
return { envelope: null, available: true, unavailableReason: '' };
|
|
39
|
+
}
|
|
40
|
+
const outcomes = await Promise.allSettled(activePacks.map((l) => l.capabilities.licenses.gatherOutcome(cwd)));
|
|
41
|
+
const successEnvelopes = [];
|
|
42
|
+
let firstUnavailable = null;
|
|
43
|
+
for (let i = 0; i < outcomes.length; i++) {
|
|
44
|
+
const r = outcomes[i];
|
|
45
|
+
if (r.status === 'rejected') {
|
|
46
|
+
if (!firstUnavailable) {
|
|
47
|
+
firstUnavailable = {
|
|
48
|
+
pack: activePacks[i].id,
|
|
49
|
+
reason: `provider threw: ${r.reason?.message ?? 'unknown error'}`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const outcome = r.value;
|
|
55
|
+
if (outcome.kind === 'success') {
|
|
56
|
+
successEnvelopes.push(outcome.envelope);
|
|
57
|
+
}
|
|
58
|
+
else if (outcome.kind === 'unavailable' && !firstUnavailable) {
|
|
59
|
+
firstUnavailable = { pack: activePacks[i].id, reason: outcome.reason };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const envelope = successEnvelopes.length > 0 ? descriptors_1.PER_PACK_REGISTRY.licenses.aggregate(successEnvelopes) : null;
|
|
63
|
+
return {
|
|
64
|
+
envelope,
|
|
65
|
+
available: firstUnavailable === null,
|
|
66
|
+
unavailableReason: firstUnavailable
|
|
67
|
+
? `${firstUnavailable.pack}: ${firstUnavailable.reason}`
|
|
68
|
+
: '',
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Legacy entry point — preserved for callers that don't need the
|
|
73
|
+
* availability metadata. New callers should use
|
|
74
|
+
* `gatherLicensesWithAvailability` directly so the framing notice
|
|
75
|
+
* + degraded-inventory fallback paths can engage.
|
|
18
76
|
*/
|
|
19
77
|
async function gatherLicensesResult(cwd) {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
return dispatcher_1.defaultDispatcher.gather(cwd, descriptor, providers);
|
|
78
|
+
const { envelope } = await gatherLicensesWithAvailability(cwd);
|
|
79
|
+
return envelope;
|
|
23
80
|
}
|
|
24
81
|
//# sourceMappingURL=gather.js.map
|