@vyuhlabs/dxkit 2.4.6 → 2.4.8
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 +1076 -0
- package/README.md +132 -27
- 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 +667 -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 +21 -9
- package/dist/analyzers/developer/index.js.map +1 -1
- package/dist/analyzers/dispatcher.d.ts +52 -0
- package/dist/analyzers/dispatcher.d.ts.map +1 -1
- package/dist/analyzers/dispatcher.js +92 -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 +282 -34
- 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 +86 -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 +197 -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 +349 -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 +104 -1
- package/dist/analyzers/security/gather.d.ts.map +1 -1
- package/dist/analyzers/security/gather.js +299 -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 +83 -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/deadline.d.ts +67 -0
- package/dist/analyzers/tools/deadline.d.ts.map +1 -0
- package/dist/analyzers/tools/deadline.js +81 -0
- package/dist/analyzers/tools/deadline.js.map +1 -0
- 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/lint-label.d.ts +29 -0
- package/dist/analyzers/tools/lint-label.d.ts.map +1 -0
- package/dist/analyzers/tools/lint-label.js +23 -0
- package/dist/analyzers/tools/lint-label.js.map +1 -0
- 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 +133 -0
- package/dist/analyzers/tools/nuget-package-reference.d.ts.map +1 -0
- package/dist/analyzers/tools/nuget-package-reference.js +177 -0
- package/dist/analyzers/tools/nuget-package-reference.js.map +1 -0
- package/dist/analyzers/tools/osv-scanner-deps.d.ts +3 -2
- package/dist/analyzers/tools/osv-scanner-deps.d.ts.map +1 -1
- package/dist/analyzers/tools/osv-scanner-deps.js +32 -14
- package/dist/analyzers/tools/osv-scanner-deps.js.map +1 -1
- 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/report-date.d.ts +17 -0
- package/dist/analyzers/tools/report-date.d.ts.map +1 -0
- package/dist/analyzers/tools/report-date.js +26 -0
- package/dist/analyzers/tools/report-date.js.map +1 -0
- 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.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +11 -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 +581 -189
- package/dist/cli.js.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 +132 -2
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +207 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts.map +1 -1
- package/dist/languages/java.js +113 -26
- package/dist/languages/java.js.map +1 -1
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +132 -26
- 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 +39 -1
- package/dist/languages/ruby.d.ts.map +1 -1
- package/dist/languages/ruby.js +178 -44
- package/dist/languages/ruby.js.map +1 -1
- 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 +16 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/.claude/commands/dashboard.md +17 -9
- 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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { HealthMetrics, HealthReport } from './types';
|
|
2
|
+
import type { AnalysisResult, AnalysisResultBody } from '../analysis-result';
|
|
2
3
|
/** Default values for all HealthMetrics fields. */
|
|
3
4
|
export declare function defaultMetrics(): HealthMetrics;
|
|
4
5
|
/** Options for analyzeHealth. */
|
|
@@ -17,4 +18,30 @@ export declare function analyzeHealthWithMetrics(repoPath: string, options?: Ana
|
|
|
17
18
|
}>;
|
|
18
19
|
/** Run a full health analysis on a repository. */
|
|
19
20
|
export declare function analyzeHealth(repoPath: string, options?: AnalyzeHealthOptions): Promise<HealthReport>;
|
|
21
|
+
/**
|
|
22
|
+
* The gather pipeline — everything that produces an `AnalysisResultBody`
|
|
23
|
+
* for a given repo. Pure with respect to the working tree: same SHA +
|
|
24
|
+
* same `.dxkit-ignore` + same dxkit version means same output. Scoring
|
|
25
|
+
* and formatting are deliberately NOT part of this — they live in
|
|
26
|
+
* `scoreAndFormatHealth` so cache hits skip the tool gather entirely
|
|
27
|
+
* but still re-render the report (cheap, deterministic, decoupled from
|
|
28
|
+
* I/O).
|
|
29
|
+
*
|
|
30
|
+
* Called by the cache layer (`readOrBuildAnalysisResult`) on a miss.
|
|
31
|
+
* Exported so other analyzers can drop into the same pattern in
|
|
32
|
+
* subsequent migrations: each subcommand asks the cache for a
|
|
33
|
+
* `AnalysisResult`, builder is supplied as `gatherAnalysisResultBody`,
|
|
34
|
+
* and the subcommand renders its own report from the body.
|
|
35
|
+
*/
|
|
36
|
+
export declare function gatherAnalysisResultBody(repoPath: string, options?: AnalyzeHealthOptions): Promise<AnalysisResultBody>;
|
|
37
|
+
/**
|
|
38
|
+
* Score the six dimensions and format the result into a `HealthReport`.
|
|
39
|
+
* Pure function over a cached `AnalysisResult` — no I/O, no tool
|
|
40
|
+
* shell-outs. Provenance fields (commitSha, branch, analyzedAt) come
|
|
41
|
+
* directly from the cached result, which means two `health` calls on
|
|
42
|
+
* the same commit produce reports with the SAME `analyzedAt`
|
|
43
|
+
* timestamp: it's "when this gather was built," not "when this read
|
|
44
|
+
* happened." That's the cross-process-consistency contract.
|
|
45
|
+
*/
|
|
46
|
+
export declare function scoreAndFormatHealth(result: AnalysisResult): HealthReport;
|
|
20
47
|
//# sourceMappingURL=health.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/analyzers/health.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/analyzers/health.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAoB,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAgC7E,mDAAmD;AACnD,wBAAgB,cAAc,IAAI,aAAa,CAiD9C;AAED,iCAAiC;AACjC,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC,CAE3D;AAED,kDAAkD;AAClD,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,YAAY,CAAC,CAEvB;AAcD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAuG7B;AAsBD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CA0BzE"}
|
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,35 @@ 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");
|
|
60
|
+
const lint_label_1 = require("./tools/lint-label");
|
|
51
61
|
const coverage_1 = require("./tools/coverage");
|
|
52
62
|
const package_json_1 = require("./tools/package-json");
|
|
63
|
+
const gather_1 = require("./quality/gather");
|
|
53
64
|
const timing_1 = require("./tools/timing");
|
|
54
65
|
const dispatcher_1 = require("./dispatcher");
|
|
55
66
|
const descriptors_1 = require("../languages/capabilities/descriptors");
|
|
56
67
|
const capabilities_1 = require("../languages/capabilities");
|
|
68
|
+
const gather_2 = require("./security/gather");
|
|
69
|
+
const gather_3 = require("./licenses/gather");
|
|
57
70
|
const shallow_1 = require("./tests/shallow");
|
|
58
71
|
const shallow_2 = require("./quality/shallow");
|
|
59
72
|
const shallow_3 = require("./docs/shallow");
|
|
60
73
|
const shallow_4 = require("./security/shallow");
|
|
61
74
|
const shallow_5 = require("./maintainability/shallow");
|
|
62
75
|
const shallow_6 = require("./dx/shallow");
|
|
63
|
-
const scoring_1 = require("
|
|
64
|
-
const runner_1 = require("./tools/runner");
|
|
76
|
+
const scoring_1 = require("../scoring");
|
|
65
77
|
/** Default values for all HealthMetrics fields. */
|
|
66
78
|
function defaultMetrics() {
|
|
67
79
|
return {
|
|
@@ -76,6 +88,7 @@ function defaultMetrics() {
|
|
|
76
88
|
filesOver500Lines: 0,
|
|
77
89
|
largestFileLines: 0,
|
|
78
90
|
largestFilePath: '',
|
|
91
|
+
largestFiles: [],
|
|
79
92
|
consoleLogCount: 0,
|
|
80
93
|
anyTypeCount: 0,
|
|
81
94
|
readmeExists: false,
|
|
@@ -89,8 +102,15 @@ function defaultMetrics() {
|
|
|
89
102
|
privateKeyFiles: 0,
|
|
90
103
|
envFilesInGit: 0,
|
|
91
104
|
tlsDisabledCount: 0,
|
|
105
|
+
todoCount: 0,
|
|
106
|
+
fixmeCount: 0,
|
|
107
|
+
hackCount: 0,
|
|
108
|
+
staleFiles: 0,
|
|
109
|
+
mixedLanguages: false,
|
|
110
|
+
commentRatio: null,
|
|
92
111
|
controllers: 0,
|
|
93
112
|
models: 0,
|
|
113
|
+
routeHandlerFiles: 0,
|
|
94
114
|
directories: 0,
|
|
95
115
|
languages: [],
|
|
96
116
|
nodeEngineVersion: null,
|
|
@@ -118,15 +138,40 @@ async function analyzeHealth(repoPath, options = {}) {
|
|
|
118
138
|
return (await analyzeHealthInternal(repoPath, options)).report;
|
|
119
139
|
}
|
|
120
140
|
async function analyzeHealthInternal(repoPath, options = {}) {
|
|
141
|
+
const result = await (0, cache_1.readOrBuildAnalysisResult)({
|
|
142
|
+
cwd: repoPath,
|
|
143
|
+
build: (cwd) => gatherAnalysisResultBody(cwd, options),
|
|
144
|
+
});
|
|
145
|
+
const report = scoreAndFormatHealth(result);
|
|
146
|
+
return { report, metrics: result.metrics };
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* The gather pipeline — everything that produces an `AnalysisResultBody`
|
|
150
|
+
* for a given repo. Pure with respect to the working tree: same SHA +
|
|
151
|
+
* same `.dxkit-ignore` + same dxkit version means same output. Scoring
|
|
152
|
+
* and formatting are deliberately NOT part of this — they live in
|
|
153
|
+
* `scoreAndFormatHealth` so cache hits skip the tool gather entirely
|
|
154
|
+
* but still re-render the report (cheap, deterministic, decoupled from
|
|
155
|
+
* I/O).
|
|
156
|
+
*
|
|
157
|
+
* Called by the cache layer (`readOrBuildAnalysisResult`) on a miss.
|
|
158
|
+
* Exported so other analyzers can drop into the same pattern in
|
|
159
|
+
* subsequent migrations: each subcommand asks the cache for a
|
|
160
|
+
* `AnalysisResult`, builder is supplied as `gatherAnalysisResultBody`,
|
|
161
|
+
* and the subcommand renders its own report from the body.
|
|
162
|
+
*/
|
|
163
|
+
async function gatherAnalysisResultBody(repoPath, options = {}) {
|
|
121
164
|
const verbose = !!options.verbose;
|
|
122
165
|
// Step 1: Detect stack
|
|
123
166
|
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
|
-
|
|
167
|
+
// Step 2: Gather metrics -- generic first, then language-specific, then optional.
|
|
168
|
+
// Active-pack flags from `stack` drive the architecturalShape-aware
|
|
169
|
+
// path counters (primary components, route handlers, data models).
|
|
170
|
+
const generic = (0, timing_1.timed)('generic (Layer 0)', verbose, () => (0, generic_1.gatherGenericMetrics)(repoPath, stack.languages));
|
|
126
171
|
const metrics = { ...defaultMetrics(), ...generic };
|
|
127
172
|
// `package.json` metrics: npm-script count + `engines.node` pin. These
|
|
128
173
|
// don't fit any capability (Node-specific by nature) and used to live
|
|
129
|
-
// in the typescript pack's `gatherMetrics` body; extracted
|
|
174
|
+
// in the typescript pack's `gatherMetrics` body; extracted later into
|
|
130
175
|
// a direct helper so they survive the per-pack channel deletion.
|
|
131
176
|
const pkg = (0, timing_1.timed)('package.json', verbose, () => (0, package_json_1.gatherPackageJsonMetrics)(repoPath));
|
|
132
177
|
metrics.npmScriptsCount = pkg.npmScriptsCount;
|
|
@@ -135,8 +180,25 @@ async function analyzeHealthInternal(repoPath, options = {}) {
|
|
|
135
180
|
// counts, graphify AST stats. Reshaped from the dispatcher's cached
|
|
136
181
|
// envelopes (`tools/parallel.ts`), so each tool shells out at most once
|
|
137
182
|
// per analyzer run.
|
|
138
|
-
const layer2 = (0, timing_1.
|
|
183
|
+
const layer2 = await (0, timing_1.timedAsync)('layer2 (parallel)', verbose, () => (0, parallel_1.gatherLayer2Parallel)(repoPath, verbose));
|
|
139
184
|
mergeLayer2(metrics, layer2);
|
|
185
|
+
// Hygiene + comment-ratio metrics shared with the standalone Quality
|
|
186
|
+
// report. Live in HealthMetrics so the canonical Quality scorer
|
|
187
|
+
// sees the same values from both consumer paths — closes the
|
|
188
|
+
// dual-Quality-formula drift class structurally. The standalone
|
|
189
|
+
// analyzeQuality reads these straight off the cached AnalysisResult.
|
|
190
|
+
const hygiene = (0, timing_1.timed)('hygiene (grep)', verbose, () => (0, gather_1.gatherHygieneMarkers)(repoPath));
|
|
191
|
+
metrics.todoCount = hygiene.todoCount;
|
|
192
|
+
metrics.fixmeCount = hygiene.fixmeCount;
|
|
193
|
+
metrics.hackCount = hygiene.hackCount;
|
|
194
|
+
// hygiene.consoleLogCount is intentionally NOT mirrored — Layer 2
|
|
195
|
+
// already populates metrics.consoleLogCount via the shared
|
|
196
|
+
// gatherDebugStatements helper, and both paths converge on the
|
|
197
|
+
// same number by construction.
|
|
198
|
+
metrics.staleFiles = hygiene.staleFiles.length;
|
|
199
|
+
metrics.mixedLanguages = hygiene.mixedLanguages;
|
|
200
|
+
const comments = (0, timing_1.timed)('cloc (comment ratio)', verbose, () => (0, gather_1.gatherCommentRatio)(repoPath));
|
|
201
|
+
metrics.commentRatio = comments.ratio;
|
|
140
202
|
// Surface the coverage tool name in `toolsUsed` even though its data
|
|
141
203
|
// lives under `capabilities.coverage`. `loadCoverage` and the COVERAGE
|
|
142
204
|
// dispatcher share the same underlying providers — the call here is
|
|
@@ -161,22 +223,58 @@ async function analyzeHealthInternal(repoPath, options = {}) {
|
|
|
161
223
|
lang.percentage = Math.round((lang.lines / totalCodeLines) * 100);
|
|
162
224
|
}
|
|
163
225
|
}
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
// bundle (C.2).
|
|
226
|
+
// Capability envelopes alongside legacy metrics. Dispatched in parallel;
|
|
227
|
+
// providers the legacy path already ran are served from the dispatcher
|
|
228
|
+
// cache (free). Scorers read capability-owned fields from this bundle.
|
|
168
229
|
const capabilities = await (0, timing_1.timedAsync)('capabilities', verbose, () => gatherCapabilityReport(repoPath));
|
|
169
230
|
// Synthesize per-pack tool names (eslint, npm-audit, ruff, pip-audit,
|
|
170
231
|
// clippy, cargo-audit, golangci-lint, govulncheck, dotnet-format,
|
|
171
232
|
// dotnet-vulnerable) into `metrics.toolsUsed` from the LINT + DEP_VULNS
|
|
172
|
-
// envelopes.
|
|
173
|
-
//
|
|
233
|
+
// envelopes. Sourced from the dispatcher's already-computed `tool` field
|
|
234
|
+
// rather than each pack's gather body.
|
|
174
235
|
for (const name of toolsFromCapabilities(capabilities)) {
|
|
175
236
|
if (!metrics.toolsUsed.includes(name))
|
|
176
237
|
metrics.toolsUsed.push(name);
|
|
177
238
|
}
|
|
178
|
-
//
|
|
179
|
-
|
|
239
|
+
// Push attempted-but-failed capabilities into metrics.toolsUnavailable
|
|
240
|
+
// so consumers reading the report see the failure honestly rather
|
|
241
|
+
// than as silent absence. Reads from the *Availability sibling
|
|
242
|
+
// fields populated above. The reason text is consumer-renderable;
|
|
243
|
+
// keep it concise (~one short sentence).
|
|
244
|
+
pushUnavailable(metrics, capabilities.codePatternsAvailability, 'semgrep');
|
|
245
|
+
pushUnavailable(metrics, capabilities.duplicationAvailability, 'jscpd');
|
|
246
|
+
pushUnavailable(metrics, capabilities.structuralAvailability, 'graphify');
|
|
247
|
+
pushUnavailable(metrics, capabilities.lintAvailability, 'lint');
|
|
248
|
+
return { stack, capabilities, metrics };
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Append a `<toolName> (<reason>)` entry to `metrics.toolsUnavailable`
|
|
252
|
+
* when an availability sibling reports the capability was attempted
|
|
253
|
+
* but failed. No-ops when the capability is fully clean (available:
|
|
254
|
+
* true) or when the sibling is absent. Deduplicates against any
|
|
255
|
+
* entry already pushed by Layer 2's parallel.ts (which renders
|
|
256
|
+
* gitleaks / graphify failures into the same field).
|
|
257
|
+
*/
|
|
258
|
+
function pushUnavailable(metrics, avail, toolName) {
|
|
259
|
+
if (!avail || avail.available)
|
|
260
|
+
return;
|
|
261
|
+
const entry = avail.unavailableReason ? `${toolName} (${avail.unavailableReason})` : toolName;
|
|
262
|
+
if (!metrics.toolsUnavailable.some((e) => e === entry || e.startsWith(`${toolName} (`))) {
|
|
263
|
+
metrics.toolsUnavailable.push(entry);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Score the six dimensions and format the result into a `HealthReport`.
|
|
268
|
+
* Pure function over a cached `AnalysisResult` — no I/O, no tool
|
|
269
|
+
* shell-outs. Provenance fields (commitSha, branch, analyzedAt) come
|
|
270
|
+
* directly from the cached result, which means two `health` calls on
|
|
271
|
+
* the same commit produce reports with the SAME `analyzedAt`
|
|
272
|
+
* timestamp: it's "when this gather was built," not "when this read
|
|
273
|
+
* happened." That's the cross-process-consistency contract.
|
|
274
|
+
*/
|
|
275
|
+
function scoreAndFormatHealth(result) {
|
|
276
|
+
const { stack, capabilities, metrics } = result;
|
|
277
|
+
const scoreInput = { metrics, capabilities, languageFlags: stack.languages };
|
|
180
278
|
const dimensions = {
|
|
181
279
|
testing: (0, shallow_1.scoreTestsDimension)(scoreInput),
|
|
182
280
|
quality: (0, shallow_2.scoreQualityDimension)(scoreInput),
|
|
@@ -185,23 +283,20 @@ async function analyzeHealthInternal(repoPath, options = {}) {
|
|
|
185
283
|
maintainability: (0, shallow_5.scoreMaintainabilityDimension)(scoreInput),
|
|
186
284
|
developerExperience: (0, shallow_6.scoreDxDimension)(scoreInput),
|
|
187
285
|
};
|
|
188
|
-
const { overallScore,
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
commitSha,
|
|
196
|
-
branch,
|
|
197
|
-
summary: { overallScore, grade },
|
|
286
|
+
const { overallScore, rating } = (0, scoring_1.computeOverall)(dimensions);
|
|
287
|
+
return {
|
|
288
|
+
repo: stack.projectName || path.basename(result.cwd),
|
|
289
|
+
analyzedAt: result.builtAt,
|
|
290
|
+
commitSha: result.commitSha,
|
|
291
|
+
branch: result.branch,
|
|
292
|
+
summary: { overallScore, rating },
|
|
198
293
|
dimensions,
|
|
199
294
|
languages: metrics.languages,
|
|
295
|
+
largestFiles: metrics.largestFiles,
|
|
200
296
|
toolsUsed: metrics.toolsUsed,
|
|
201
297
|
toolsUnavailable: metrics.toolsUnavailable,
|
|
202
298
|
capabilities,
|
|
203
299
|
};
|
|
204
|
-
return { report, metrics };
|
|
205
300
|
}
|
|
206
301
|
/**
|
|
207
302
|
* Extract user-facing tool names from every capability envelope that
|
|
@@ -240,7 +335,16 @@ function toolsFromCapabilities(caps) {
|
|
|
240
335
|
return names;
|
|
241
336
|
}
|
|
242
337
|
function splitToolNames(tool) {
|
|
243
|
-
|
|
338
|
+
// The lint label may carry a `(not run: <pack> — <reason>[, ...])`
|
|
339
|
+
// parenthetical (built by the lint augmentation block earlier in
|
|
340
|
+
// this file). The Tools-used footer wants only the actual tool that
|
|
341
|
+
// ran — leaving the parenthetical in makes the footer row read as
|
|
342
|
+
// "ruff didn't run because of typescript" and also breaks the
|
|
343
|
+
// comma-split here when multiple packs are skipped (internal commas
|
|
344
|
+
// inside the parenthetical get treated as tool boundaries). Strip
|
|
345
|
+
// it before splitting. The not-run packs still surface via the
|
|
346
|
+
// dedicated Lint coverage gap row downstream.
|
|
347
|
+
return (0, lint_label_1.stripNotRunSuffix)(tool)
|
|
244
348
|
.split(',')
|
|
245
349
|
.map((s) => s.trim())
|
|
246
350
|
.filter((s) => s.length > 0);
|
|
@@ -254,22 +358,104 @@ function splitToolNames(tool) {
|
|
|
254
358
|
* isolates provider failures.
|
|
255
359
|
*/
|
|
256
360
|
async function gatherCapabilityReport(cwd) {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
361
|
+
// D025b (2.4.7): depVulns gathers via `gatherDepVulnsWithAvailability`
|
|
362
|
+
// (NOT the dispatcher) so the per-pack availability discriminant
|
|
363
|
+
// survives to the health-side scorer. Health doesn't need the
|
|
364
|
+
// enrichment passes (EPSS/KEV/reachability/risk) that the standalone
|
|
365
|
+
// vuln scan does — those run on the standalone path inside
|
|
366
|
+
// `gatherDepVulns`. The shared primitive returns the same
|
|
367
|
+
// `DepVulnResult` envelope shape the dispatcher would produce, plus
|
|
368
|
+
// the availability metadata.
|
|
369
|
+
const [depVulnsWithAvail, lintOutcome, coverage, imports, testFramework, secrets, codePatternsOutcome, duplicationOutcome, structuralOutcome, licensesWithAvail,] = await Promise.all([
|
|
370
|
+
(0, gather_2.gatherDepVulnsWithAvailability)(cwd),
|
|
371
|
+
// gatherWithProvenance (not gather) so the cached LintResult.tool
|
|
372
|
+
// can carry the "(not run: <packs>)" suffix when one of the
|
|
373
|
+
// active packs returned null silently. Standalone analyzeQuality
|
|
374
|
+
// reads the augmented label off the cached envelope — closes the
|
|
375
|
+
// cross-process drift class where two surfaces could disagree on
|
|
376
|
+
// whether a linter ran on a given pack.
|
|
377
|
+
dispatcher_1.defaultDispatcher.gatherWithProvenance(cwd, descriptors_1.LINT, (0, capabilities_1.providersFor)(descriptors_1.LINT, cwd)),
|
|
260
378
|
dispatcher_1.defaultDispatcher.gather(cwd, descriptors_1.COVERAGE, (0, capabilities_1.providersFor)(descriptors_1.COVERAGE, cwd)),
|
|
261
379
|
dispatcher_1.defaultDispatcher.gather(cwd, descriptors_1.IMPORTS, (0, capabilities_1.providersFor)(descriptors_1.IMPORTS, cwd)),
|
|
262
380
|
dispatcher_1.defaultDispatcher.gather(cwd, descriptors_1.TEST_FRAMEWORK, (0, capabilities_1.providersFor)(descriptors_1.TEST_FRAMEWORK, cwd)),
|
|
263
381
|
dispatcher_1.defaultDispatcher.gather(cwd, descriptors_1.SECRETS, (0, capabilities_1.providersFor)(descriptors_1.SECRETS, cwd)),
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
382
|
+
// gatherWithProvenance so the cache builder can plumb per-capability
|
|
383
|
+
// availability metadata for tools that may legitimately gather
|
|
384
|
+
// attempted-but-failed (semgrep / jscpd / graphify under resource
|
|
385
|
+
// contention; tool not installed; etc.). Without this the cache's
|
|
386
|
+
// metrics.toolsUnavailable can't distinguish "tool didn't try" from
|
|
387
|
+
// "tool tried and failed silently" — the same dishonest-rendering
|
|
388
|
+
// class as the lint case the LINT switch above closes.
|
|
389
|
+
dispatcher_1.defaultDispatcher.gatherWithProvenance(cwd, descriptors_1.CODE_PATTERNS, (0, capabilities_1.providersFor)(descriptors_1.CODE_PATTERNS, cwd)),
|
|
390
|
+
dispatcher_1.defaultDispatcher.gatherWithProvenance(cwd, descriptors_1.DUPLICATION, (0, capabilities_1.providersFor)(descriptors_1.DUPLICATION, cwd)),
|
|
391
|
+
dispatcher_1.defaultDispatcher.gatherWithProvenance(cwd, descriptors_1.STRUCTURAL, (0, capabilities_1.providersFor)(descriptors_1.STRUCTURAL, cwd)),
|
|
392
|
+
(0, gather_3.gatherLicensesWithAvailability)(cwd),
|
|
267
393
|
]);
|
|
394
|
+
const codePatterns = codePatternsOutcome.envelope;
|
|
395
|
+
const duplication = duplicationOutcome.envelope;
|
|
396
|
+
const structural = structuralOutcome.envelope;
|
|
268
397
|
const report = {};
|
|
269
|
-
if (
|
|
270
|
-
report.depVulns =
|
|
398
|
+
if (depVulnsWithAvail.envelope)
|
|
399
|
+
report.depVulns = depVulnsWithAvail.envelope;
|
|
400
|
+
// Always plumb availability — even when envelope is null, the bool
|
|
401
|
+
// disambiguates "no active pack" (available=true, no cap) from
|
|
402
|
+
// "active pack returned unavailable" (available=false, cap fires).
|
|
403
|
+
report.depVulnsAvailability = {
|
|
404
|
+
available: depVulnsWithAvail.available,
|
|
405
|
+
unavailableReason: depVulnsWithAvail.unavailableReason,
|
|
406
|
+
};
|
|
407
|
+
// Augment the lint envelope's tool label with skipped-pack
|
|
408
|
+
// provenance before caching, so consumers see the same label
|
|
409
|
+
// analyzeQuality's old standalone gather produced. Reconstructed
|
|
410
|
+
// (not mutated) because envelope.tool is readonly.
|
|
411
|
+
//
|
|
412
|
+
// When `skipReasons` carries a per-pack reason (the typescript +
|
|
413
|
+
// python lint providers expose `gatherOutcome` for exactly this),
|
|
414
|
+
// the label includes it so customers can act on the disclosure
|
|
415
|
+
// instead of being told "typescript lint not run" with no
|
|
416
|
+
// explanation. Example post-fix label on a platform-style polyglot:
|
|
417
|
+
// `ruff (not run: typescript — no eslint config found)`
|
|
418
|
+
const lint = (() => {
|
|
419
|
+
if (!lintOutcome.envelope || lintOutcome.skipped.length === 0) {
|
|
420
|
+
return lintOutcome.envelope;
|
|
421
|
+
}
|
|
422
|
+
const annotated = lintOutcome.skipped
|
|
423
|
+
.map((src) => {
|
|
424
|
+
const reason = lintOutcome.skipReasons[src];
|
|
425
|
+
return reason ? `${src} — ${reason}` : src;
|
|
426
|
+
})
|
|
427
|
+
.join(', ');
|
|
428
|
+
return {
|
|
429
|
+
...lintOutcome.envelope,
|
|
430
|
+
tool: `${lintOutcome.envelope.tool} (not run: ${annotated})`,
|
|
431
|
+
};
|
|
432
|
+
})();
|
|
271
433
|
if (lint)
|
|
272
434
|
report.lint = lint;
|
|
435
|
+
// Lint availability so consumers can distinguish "no active
|
|
436
|
+
// lint-capable pack" (vacuous clean, available=true, no envelope)
|
|
437
|
+
// from "every active provider returned null" (available=false —
|
|
438
|
+
// actionable "try installing dependencies"). Same shape as
|
|
439
|
+
// licensesAvailability + depVulnsAvailability.
|
|
440
|
+
if (lintOutcome.attempted.length > 0 && lintOutcome.succeeded.length === 0) {
|
|
441
|
+
// Every attempted provider returned null — surface the per-pack
|
|
442
|
+
// reasons (when available via `gatherOutcome`) so the customer
|
|
443
|
+
// sees what to fix, not just which packs gave up.
|
|
444
|
+
const annotated = lintOutcome.attempted
|
|
445
|
+
.map((src) => {
|
|
446
|
+
const reason = lintOutcome.skipReasons[src];
|
|
447
|
+
return reason ? `${src} — ${reason}` : src;
|
|
448
|
+
})
|
|
449
|
+
.join('; ');
|
|
450
|
+
const pluralS = lintOutcome.attempted.length === 1 ? '' : 's';
|
|
451
|
+
report.lintAvailability = {
|
|
452
|
+
available: false,
|
|
453
|
+
unavailableReason: `provider${pluralS} returned no data: ${annotated}`,
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
report.lintAvailability = { available: true, unavailableReason: '' };
|
|
458
|
+
}
|
|
273
459
|
if (coverage)
|
|
274
460
|
report.coverage = coverage;
|
|
275
461
|
if (imports)
|
|
@@ -280,12 +466,74 @@ async function gatherCapabilityReport(cwd) {
|
|
|
280
466
|
report.secrets = secrets;
|
|
281
467
|
if (codePatterns)
|
|
282
468
|
report.codePatterns = codePatterns;
|
|
469
|
+
// Same shape as lintAvailability — distinguishes "no rulesets
|
|
470
|
+
// active" (vacuous clean) from "semgrep/jscpd/graphify was
|
|
471
|
+
// attempted but every provider returned null" (actionable —
|
|
472
|
+
// the customer's report shouldn't silently miss the tool).
|
|
473
|
+
report.codePatternsAvailability = availabilityFromOutcome(codePatternsOutcome, 'semgrep');
|
|
283
474
|
if (duplication)
|
|
284
475
|
report.duplication = duplication;
|
|
476
|
+
report.duplicationAvailability = availabilityFromOutcome(duplicationOutcome, 'jscpd');
|
|
285
477
|
if (structural)
|
|
286
478
|
report.structural = structural;
|
|
479
|
+
report.structuralAvailability = availabilityFromOutcome(structuralOutcome, 'graphify');
|
|
480
|
+
if (licensesWithAvail.envelope)
|
|
481
|
+
report.licenses = licensesWithAvail.envelope;
|
|
482
|
+
// Always plumb availability — even when envelope is null, the bool
|
|
483
|
+
// disambiguates "no active pack with a licenses provider" (vacuous
|
|
484
|
+
// success) from "active pack returned unavailable" (banner fires).
|
|
485
|
+
report.licensesAvailability = {
|
|
486
|
+
available: licensesWithAvail.available,
|
|
487
|
+
unavailableReason: licensesWithAvail.unavailableReason,
|
|
488
|
+
};
|
|
489
|
+
// G_v4_8 (C1.3): build the canonical aggregate from everything we
|
|
490
|
+
// just gathered, plus the two security finders not represented in
|
|
491
|
+
// the capability layer (tls-bypass-registry walk, file findings).
|
|
492
|
+
// Stored on the CapabilityReport so dimension scorers — currently
|
|
493
|
+
// `security/shallow.ts` — read the SAME aggregate the standalone
|
|
494
|
+
// vuln-scan reads. Closes the D086 class of cross-consumer drift
|
|
495
|
+
// by construction.
|
|
496
|
+
report.securityAggregate = await (0, gather_2.buildSecurityAggregateForHealth)(cwd, secrets ?? undefined, codePatterns ?? undefined, depVulnsWithAvail.envelope ?? undefined, depVulnsWithAvail.available, depVulnsWithAvail.unavailableReason);
|
|
287
497
|
return report;
|
|
288
498
|
}
|
|
499
|
+
/**
|
|
500
|
+
* Derive `<cap>Availability` metadata from a gatherWithProvenance
|
|
501
|
+
* outcome. Mirrors the depVulnsAvailability / licensesAvailability
|
|
502
|
+
* pattern: `available === false` only when at least one provider was
|
|
503
|
+
* attempted AND none succeeded (i.e. tried + failed silently).
|
|
504
|
+
* Empty `attempted` list reports available: true (vacuous — nothing
|
|
505
|
+
* to try, nothing to fail).
|
|
506
|
+
*/
|
|
507
|
+
function availabilityFromOutcome(outcome, _toolLabel) {
|
|
508
|
+
if (outcome.attempted.length === 0) {
|
|
509
|
+
return { available: true, unavailableReason: '' };
|
|
510
|
+
}
|
|
511
|
+
if (outcome.succeeded.length > 0) {
|
|
512
|
+
return { available: true, unavailableReason: '' };
|
|
513
|
+
}
|
|
514
|
+
// Prefer the per-source reason from the dispatcher's skipReasons map
|
|
515
|
+
// when present — that channel carries the tool's actual failure mode
|
|
516
|
+
// (`not installed` / `timed out at 600s` / `exit code 137 (stderr: ...)`
|
|
517
|
+
// / `no output` / `parse error`). Falls back to the generic prose for
|
|
518
|
+
// legacy providers without a `gatherOutcome` method, which collapse
|
|
519
|
+
// every failure to "null returned from gather()" with no reason text.
|
|
520
|
+
//
|
|
521
|
+
// The reason intentionally omits the tool name — pushUnavailable
|
|
522
|
+
// prepends it as `<tool> (<reason>)`, so duplicating the name here
|
|
523
|
+
// would render as `jscpd (jscpd attempted ...)`.
|
|
524
|
+
const skipReasons = outcome.skipReasons ?? {};
|
|
525
|
+
const firstSkipWithReason = outcome.skipped.find((s) => skipReasons[s]);
|
|
526
|
+
if (firstSkipWithReason) {
|
|
527
|
+
return {
|
|
528
|
+
available: false,
|
|
529
|
+
unavailableReason: skipReasons[firstSkipWithReason],
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
return {
|
|
533
|
+
available: false,
|
|
534
|
+
unavailableReason: 'attempted but produced no output (likely killed by resource limits — try running dxkit on this repo alone)',
|
|
535
|
+
};
|
|
536
|
+
}
|
|
289
537
|
/**
|
|
290
538
|
* Merge `gatherLayer2Parallel` output (cloc + gitleaks + graphify reshape)
|
|
291
539
|
* 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":"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"}
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/analyzers/health.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,wCAiDC;AAaD,4DAKC;AAGD,sCAKC;AA6BD,4DA0GC;AA+BD,oDA0BC;AA9TD;;;;;;;;;;;;;GAaG;AACH,2CAA6B;AAC7B,sCAAmC;AAInC,mCAAoD;AACpD,6CAAuD;AACvD,+CAAwD;AACxD,mDAAuD;AACvD,+CAAgD;AAChD,uDAAgE;AAChE,6CAA4E;AAC5E,2CAAmD;AACnD,6CAAiD;AACjD,uEAS+C;AAC/C,4DAAyD;AACzD,8CAAoG;AACpG,8CAAmE;AACnE,6CAAsD;AACtD,+CAA0D;AAC1D,4CAAoD;AACpD,gDAA4D;AAC5D,uDAA0E;AAC1E,0CAAgD;AAChD,wCAA4C;AAG5C,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,YAAY,EAAE,EAAE;QAChB,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,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,CAAC;QACd,MAAM,EAAE,CAAC;QACT,iBAAiB,EAAE,CAAC;QACpB,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,MAAM,GAAG,MAAM,IAAA,iCAAyB,EAAC;QAC7C,GAAG,EAAE,QAAQ;QACb,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC;KACvD,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACI,KAAK,UAAU,wBAAwB,CAC5C,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,kFAAkF;IAClF,oEAAoE;IACpE,mEAAmE;IACnE,MAAM,OAAO,GAAG,IAAA,cAAK,EAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,CACvD,IAAA,8BAAoB,EAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAChD,CAAC;IACF,MAAM,OAAO,GAAkB,EAAE,GAAG,cAAc,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC;IAEnE,uEAAuE;IACvE,sEAAsE;IACtE,sEAAsE;IACtE,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,MAAM,IAAA,mBAAU,EAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,CACjE,IAAA,+BAAoB,EAAC,QAAQ,EAAE,OAAO,CAAC,CACxC,CAAC;IACF,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE7B,qEAAqE;IACrE,gEAAgE;IAChE,6DAA6D;IAC7D,gEAAgE;IAChE,qEAAqE;IACrE,MAAM,OAAO,GAAG,IAAA,cAAK,EAAC,gBAAgB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAA,6BAAoB,EAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACtC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACxC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACtC,kEAAkE;IAClE,2DAA2D;IAC3D,+DAA+D;IAC/D,+BAA+B;IAC/B,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;IAC/C,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAA,cAAK,EAAC,sBAAsB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAA,2BAAkB,EAAC,QAAQ,CAAC,CAAC,CAAC;IAC5F,OAAO,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;IAEtC,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,yEAAyE;IACzE,uEAAuE;IACvE,uEAAuE;IACvE,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,yEAAyE;IACzE,uCAAuC;IACvC,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,uEAAuE;IACvE,kEAAkE;IAClE,+DAA+D;IAC/D,kEAAkE;IAClE,yCAAyC;IACzC,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IAC3E,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;IACxE,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;IAC1E,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAEhE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,OAAsB,EACtB,KAAoE,EACpE,QAAgB;IAEhB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9F,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC;QACxF,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAAC,MAAsB;IACzD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAChD,MAAM,UAAU,GAAe,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACzF,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,MAAM,EAAE,GAAG,IAAA,wBAAc,EAAC,UAAU,CAAC,CAAC;IAE5D,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;QACpD,UAAU,EAAE,MAAM,CAAC,OAAO;QAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE;QACjC,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,YAAY;KACb,CAAC;AACJ,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,mEAAmE;IACnE,iEAAiE;IACjE,oEAAoE;IACpE,kEAAkE;IAClE,8DAA8D;IAC9D,oEAAoE;IACpE,kEAAkE;IAClE,+DAA+D;IAC/D,8CAA8C;IAC9C,OAAO,IAAA,8BAAiB,EAAC,IAAI,CAAC;SAC3B,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,uEAAuE;IACvE,iEAAiE;IACjE,8DAA8D;IAC9D,qEAAqE;IACrE,2DAA2D;IAC3D,0DAA0D;IAC1D,oEAAoE;IACpE,6BAA6B;IAC7B,MAAM,CACJ,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,OAAO,EACP,aAAa,EACb,OAAO,EACP,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EAClB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpB,IAAA,uCAA8B,EAAC,GAAG,CAAC;QACnC,kEAAkE;QAClE,4DAA4D;QAC5D,iEAAiE;QACjE,iEAAiE;QACjE,iEAAiE;QACjE,wCAAwC;QACxC,8BAAiB,CAAC,oBAAoB,CAAC,GAAG,EAAE,kBAAI,EAAE,IAAA,2BAAY,EAAC,kBAAI,EAAE,GAAG,CAAC,CAAC;QAC1E,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,qEAAqE;QACrE,+DAA+D;QAC/D,kEAAkE;QAClE,kEAAkE;QAClE,oEAAoE;QACpE,kEAAkE;QAClE,uDAAuD;QACvD,8BAAiB,CAAC,oBAAoB,CAAC,GAAG,EAAE,2BAAa,EAAE,IAAA,2BAAY,EAAC,2BAAa,EAAE,GAAG,CAAC,CAAC;QAC5F,8BAAiB,CAAC,oBAAoB,CAAC,GAAG,EAAE,yBAAW,EAAE,IAAA,2BAAY,EAAC,yBAAW,EAAE,GAAG,CAAC,CAAC;QACxF,8BAAiB,CAAC,oBAAoB,CAAC,GAAG,EAAE,wBAAU,EAAE,IAAA,2BAAY,EAAC,wBAAU,EAAE,GAAG,CAAC,CAAC;QACtF,IAAA,uCAA8B,EAAC,GAAG,CAAC;KACpC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC;IAClD,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC;IAChD,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAC9C,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,iBAAiB,CAAC,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAC7E,mEAAmE;IACnE,+DAA+D;IAC/D,mEAAmE;IACnE,MAAM,CAAC,oBAAoB,GAAG;QAC5B,SAAS,EAAE,iBAAiB,CAAC,SAAS;QACtC,iBAAiB,EAAE,iBAAiB,CAAC,iBAAiB;KACvD,CAAC;IACF,2DAA2D;IAC3D,6DAA6D;IAC7D,iEAAiE;IACjE,mDAAmD;IACnD,EAAE;IACF,iEAAiE;IACjE,kEAAkE;IAClE,+DAA+D;IAC/D,0DAA0D;IAC1D,oEAAoE;IACpE,0DAA0D;IAC1D,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;QACjB,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9D,OAAO,WAAW,CAAC,QAAQ,CAAC;QAC9B,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO;aAClC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7C,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO;YACL,GAAG,WAAW,CAAC,QAAQ;YACvB,IAAI,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,cAAc,SAAS,GAAG;SAC7D,CAAC;IACJ,CAAC,CAAC,EAAE,CAAC;IACL,IAAI,IAAI;QAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IAC7B,4DAA4D;IAC5D,kEAAkE;IAClE,gEAAgE;IAChE,2DAA2D;IAC3D,+CAA+C;IAC/C,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3E,gEAAgE;QAChE,+DAA+D;QAC/D,kDAAkD;QAClD,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS;aACpC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7C,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9D,MAAM,CAAC,gBAAgB,GAAG;YACxB,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,WAAW,OAAO,sBAAsB,SAAS,EAAE;SACvE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,gBAAgB,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC;IACvE,CAAC;IACD,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,8DAA8D;IAC9D,2DAA2D;IAC3D,4DAA4D;IAC5D,2DAA2D;IAC3D,MAAM,CAAC,wBAAwB,GAAG,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;IAC1F,IAAI,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IAClD,MAAM,CAAC,uBAAuB,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACtF,IAAI,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/C,MAAM,CAAC,sBAAsB,GAAG,uBAAuB,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACvF,IAAI,iBAAiB,CAAC,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAC7E,mEAAmE;IACnE,mEAAmE;IACnE,mEAAmE;IACnE,MAAM,CAAC,oBAAoB,GAAG;QAC5B,SAAS,EAAE,iBAAiB,CAAC,SAAS;QACtC,iBAAiB,EAAE,iBAAiB,CAAC,iBAAiB;KACvD,CAAC;IAEF,kEAAkE;IAClE,kEAAkE;IAClE,kEAAkE;IAClE,kEAAkE;IAClE,iEAAiE;IACjE,iEAAiE;IACjE,mBAAmB;IACnB,MAAM,CAAC,iBAAiB,GAAG,MAAM,IAAA,wCAA+B,EAC9D,GAAG,EACH,OAAO,IAAI,SAAS,EACpB,YAAY,IAAI,SAAS,EACzB,iBAAiB,CAAC,QAAQ,IAAI,SAAS,EACvC,iBAAiB,CAAC,SAAS,EAC3B,iBAAiB,CAAC,iBAAiB,CACpC,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAC9B,OAKC,EACD,UAAkB;IAElB,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IACD,qEAAqE;IACrE,qEAAqE;IACrE,yEAAyE;IACzE,sEAAsE;IACtE,oEAAoE;IACpE,sEAAsE;IACtE,EAAE;IACF,iEAAiE;IACjE,mEAAmE;IACnE,iDAAiD;IACjD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAC9C,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,WAAW,CAAC,mBAAmB,CAAC;SACpD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,iBAAiB,EACf,4GAA4G;KAC/G,CAAC;AACJ,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,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
|
+
* customer-credibility class observed on the .NET WinForms benchmark).
|
|
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;AAGzE;;;;;;;;;;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,CA4DD;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAGtF"}
|