@vyuhlabs/dxkit 2.4.3 → 2.4.5
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 +347 -0
- package/README.md +15 -11
- package/dist/analyzers/health.js +9 -9
- package/dist/analyzers/health.js.map +1 -1
- package/dist/analyzers/licenses/gather.js +1 -1
- package/dist/analyzers/licenses/gather.js.map +1 -1
- package/dist/analyzers/quality/gather.js +2 -2
- package/dist/analyzers/quality/gather.js.map +1 -1
- package/dist/analyzers/security/gather.d.ts.map +1 -1
- package/dist/analyzers/security/gather.js +11 -2
- package/dist/analyzers/security/gather.js.map +1 -1
- package/dist/analyzers/tests/import-graph.d.ts.map +1 -1
- package/dist/analyzers/tests/import-graph.js +5 -0
- package/dist/analyzers/tests/import-graph.js.map +1 -1
- package/dist/analyzers/tests/index.d.ts.map +1 -1
- package/dist/analyzers/tests/index.js +2 -0
- package/dist/analyzers/tests/index.js.map +1 -1
- package/dist/analyzers/tests/types.d.ts +12 -2
- package/dist/analyzers/tests/types.d.ts.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/jacoco.d.ts +76 -0
- package/dist/analyzers/tools/jacoco.d.ts.map +1 -0
- package/dist/analyzers/tools/jacoco.js +228 -0
- package/dist/analyzers/tools/jacoco.js.map +1 -0
- package/dist/analyzers/tools/jscpd.d.ts +8 -7
- package/dist/analyzers/tools/jscpd.d.ts.map +1 -1
- package/dist/analyzers/tools/jscpd.js +30 -13
- package/dist/analyzers/tools/jscpd.js.map +1 -1
- package/dist/analyzers/tools/osv-scanner-fix.d.ts +20 -0
- package/dist/analyzers/tools/osv-scanner-fix.d.ts.map +1 -1
- package/dist/analyzers/tools/osv-scanner-fix.js +45 -20
- package/dist/analyzers/tools/osv-scanner-fix.js.map +1 -1
- package/dist/analyzers/tools/osv-scanner-maven.d.ts +42 -0
- package/dist/analyzers/tools/osv-scanner-maven.d.ts.map +1 -0
- package/dist/analyzers/tools/osv-scanner-maven.js +161 -0
- package/dist/analyzers/tools/osv-scanner-maven.js.map +1 -0
- package/dist/analyzers/tools/runner.d.ts +47 -0
- package/dist/analyzers/tools/runner.d.ts.map +1 -1
- package/dist/analyzers/tools/runner.js +79 -0
- package/dist/analyzers/tools/runner.js.map +1 -1
- package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +47 -0
- package/dist/analyzers/tools/tool-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -2
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/languages/capabilities/index.d.ts +21 -12
- package/dist/languages/capabilities/index.d.ts.map +1 -1
- package/dist/languages/capabilities/index.js +47 -13
- package/dist/languages/capabilities/index.js.map +1 -1
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +11 -1
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts +67 -0
- package/dist/languages/java.d.ts.map +1 -0
- package/dist/languages/java.js +419 -0
- package/dist/languages/java.js.map +1 -0
- package/dist/languages/kotlin.d.ts +52 -0
- package/dist/languages/kotlin.d.ts.map +1 -0
- package/dist/languages/kotlin.js +404 -0
- package/dist/languages/kotlin.js.map +1 -0
- package/dist/languages/types.d.ts +9 -1
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/tools-cli.d.ts +16 -1
- package/dist/tools-cli.d.ts.map +1 -1
- package/dist/tools-cli.js +69 -6
- package/dist/tools-cli.js.map +1 -1
- package/dist/types.d.ts +12 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/templates/.claude/rules/java.md +11 -0
- package/templates/.claude/rules/kotlin.md +11 -0
- package/templates/configs/java/README.md +6 -0
- package/templates/configs/kotlin/README.md +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-graph.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tests/import-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"import-graph.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tests/import-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CA8BtB"}
|
|
@@ -33,8 +33,13 @@ const languages_1 = require("../../languages");
|
|
|
33
33
|
* following import edges up to maxHops. Paths are project-relative.
|
|
34
34
|
*/
|
|
35
35
|
async function buildReachable(seeds, cwd, options = {}) {
|
|
36
|
+
// D010 fix: filter to packs active for this cwd. Imports gather is
|
|
37
|
+
// expensive (find subprocess + per-file regex extraction); inactive
|
|
38
|
+
// packs would walk the tree only to emit zero results.
|
|
36
39
|
const providers = [];
|
|
37
40
|
for (const lang of languages_1.LANGUAGES) {
|
|
41
|
+
if (!lang.detect(cwd))
|
|
42
|
+
continue;
|
|
38
43
|
const p = lang.capabilities?.imports;
|
|
39
44
|
if (p)
|
|
40
45
|
providers.push(p);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../../src/analyzers/tests/import-graph.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;AAiBH,
|
|
1
|
+
{"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../../src/analyzers/tests/import-graph.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;AAiBH,wCAkCC;AAjDD,8CAAkD;AAClD,0EAAmE;AACnE,+CAA4C;AAS5C;;;GAGG;AACI,KAAK,UAAU,cAAc,CAClC,KAAe,EACf,GAAW,EACX,UAA8B,EAAE;IAEhC,mEAAmE;IACnE,oEAAoE;IACpE,uDAAuD;IACvD,MAAM,SAAS,GAAwC,EAAE,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,qBAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,SAAS;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;QACrC,IAAI,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,qBAAO,EAAE,SAAS,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,IAAI,GAAG,EAA+B,CAAC;IAEtE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC7B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,OAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tests/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAA8B,MAAM,SAAS,CAAC;AAErE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEpF,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,cAAc,CAAC,CA0GzB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tests/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAA8B,MAAM,SAAS,CAAC;AAErE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEpF,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,cAAc,CAAC,CA0GzB;AAwBD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAqFpF"}
|
|
@@ -162,6 +162,8 @@ function coverageSourceLabel(source, file) {
|
|
|
162
162
|
return `from ${file ?? 'cobertura.xml'}`;
|
|
163
163
|
case 'lcov':
|
|
164
164
|
return `from ${file ?? 'lcov.info'}`;
|
|
165
|
+
case 'jacoco':
|
|
166
|
+
return `from ${file ?? 'jacocoTestReport.xml'}`;
|
|
165
167
|
}
|
|
166
168
|
}
|
|
167
169
|
function formatTestGapsReport(report, elapsed) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzers/tests/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,0CA6GC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzers/tests/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,18 @@ export interface SourceFile {
|
|
|
14
14
|
risk: RiskTier;
|
|
15
15
|
hasMatchingTest: boolean;
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
18
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Where the `effectiveCoverage` number came from.
|
|
19
|
+
*
|
|
20
|
+
* Single source of truth: `tools/coverage.ts:CoverageSource` enumerates
|
|
21
|
+
* artifact-derived sources (one per coverage tool format). We extend it
|
|
22
|
+
* here with two test-only "derived" sources (`filename-match`,
|
|
23
|
+
* `import-graph`) that the test-gaps analyzer falls back to when no
|
|
24
|
+
* coverage artifact is available. Adding a new pack-owned coverage
|
|
25
|
+
* format means editing one place: `tools/coverage.ts`.
|
|
26
|
+
*/
|
|
27
|
+
import type { CoverageSource as ArtifactCoverageSource } from '../tools/coverage';
|
|
28
|
+
export type CoverageSource = ArtifactCoverageSource | 'filename-match' | 'import-graph';
|
|
19
29
|
export interface TestGapsReport {
|
|
20
30
|
repo: string;
|
|
21
31
|
analyzedAt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tests/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE9D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,eAAe,GAAG,OAAO,GAAG,aAAa,CAAC;IAC7D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,CAAC;IAClF,IAAI,EAAE,QAAQ,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tests/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE9D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,eAAe,GAAG,OAAO,GAAG,aAAa,CAAC;IAC7D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,CAAC;IAClF,IAAI,EAAE,QAAQ,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,MAAM,cAAc,GACtB,sBAAsB,GACtB,gBAAgB,GAChB,cAAc,CAAC;AAEnB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;QAC1B;;;;WAIG;QACH,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iDAAiD;QACjD,cAAc,EAAE,cAAc,CAAC;QAC/B,gEAAgE;QAChE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* artifact exists or parsing fails; callers (tests analyzer) should
|
|
20
20
|
* treat a null return as "fall back to filename matching."
|
|
21
21
|
*/
|
|
22
|
-
export type CoverageSource = 'istanbul-summary' | 'istanbul-final' | 'coverage-py' | 'go' | 'cobertura' | 'lcov';
|
|
22
|
+
export type CoverageSource = 'istanbul-summary' | 'istanbul-final' | 'coverage-py' | 'go' | 'cobertura' | 'lcov' | 'jacoco';
|
|
23
23
|
export interface FileCoverage {
|
|
24
24
|
/** Project-relative path (normalized to forward slashes). */
|
|
25
25
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,GACb,IAAI,GACJ,WAAW,GACX,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,GACb,IAAI,GACJ,WAAW,GACX,MAAM,GACN,QAAQ,CAAC;AAEb,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAQxE;AAUD,8FAA8F;AAC9F,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAUzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;AAiDH,oCAQC;AAWD,wBAEC;AAGD,gCAUC;AAjFD,+CAAwD;AACxD,0EAAoE;AAGpE,8CAAkD;AAiClD;;;;;;;;;GASG;AACI,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,SAAS,GAAyC,EAAE,CAAC;IAC3D,KAAK,MAAM,IAAI,IAAI,IAAA,iCAAqB,EAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,YAAY,EAAE,QAAQ;YAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,8BAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,sBAAQ,EAAE,SAAS,CAAC,CAAC;IAC1E,OAAO,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,+EAA+E;AAC/E,EAAE;AACF,8EAA8E;AAC9E,qEAAqE;AACrE,kEAAkE;AAClE,oEAAoE;AACpE,kEAAkE;AAElE,8FAA8F;AAC9F,SAAgB,MAAM,CAAC,CAAS;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACjC,CAAC;AAED,+EAA+E;AAC/E,SAAgB,UAAU,CAAC,CAAS,EAAE,GAAW;IAC/C,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;QAClC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QAC3B,GAAG,GAAG,EAAE,CAAC;IACX,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { type Coverage } from './coverage';
|
|
2
|
+
import type { CoverageResult } from '../../languages/capabilities/types';
|
|
3
|
+
/**
|
|
4
|
+
* Pure parser for JaCoCo's XML report (DTD: `report.dtd`). The structure:
|
|
5
|
+
*
|
|
6
|
+
* <report name="...">
|
|
7
|
+
* <package name="com/example">
|
|
8
|
+
* <class name="com/example/Foo" sourcefilename="Foo.kt">...</class>
|
|
9
|
+
* <sourcefile name="Foo.kt">
|
|
10
|
+
* <line nr="N" mi="..." ci="..." mb="..." cb="..."/>
|
|
11
|
+
* <counter type="LINE" missed="X" covered="Y"/>
|
|
12
|
+
* </sourcefile>
|
|
13
|
+
* <counter type="LINE" missed="X" covered="Y"/>
|
|
14
|
+
* </package>
|
|
15
|
+
* <counter type="LINE" missed="X" covered="Y"/>
|
|
16
|
+
* </report>
|
|
17
|
+
*
|
|
18
|
+
* Per-file coverage comes from `<sourcefile>` blocks: their LINE counter
|
|
19
|
+
* holds the file's missed/covered totals. Project-level total comes from
|
|
20
|
+
* the top-level `<counter type="LINE">` (last in the document).
|
|
21
|
+
*
|
|
22
|
+
* Path attribution joins `<package name>` (forward-slashed, JVM-style)
|
|
23
|
+
* with `<sourcefile name>` to produce the canonical relative path the
|
|
24
|
+
* downstream consumers expect (`com/example/Foo.kt` or
|
|
25
|
+
* `com/example/Foo.java`). JVM bytecode namespacing isn't 1:1 with
|
|
26
|
+
* on-disk source paths in multi-module projects — accepted limitation
|
|
27
|
+
* (matches C#'s cobertura attribution).
|
|
28
|
+
*
|
|
29
|
+
* Returns null when no `<counter type="LINE">` exists at the top level
|
|
30
|
+
* — that's JaCoCo's "no coverage data" signal, distinct from "0%
|
|
31
|
+
* coverage" (where the counter exists with covered=0).
|
|
32
|
+
*
|
|
33
|
+
* Language-agnostic: works for Kotlin (.kt), Java (.java), and any
|
|
34
|
+
* other JVM language whose JaCoCo output respects the `<package>` /
|
|
35
|
+
* `<sourcefile>` shape — `<sourcefile name>` carries the on-disk
|
|
36
|
+
* filename verbatim so the parser doesn't need to know the language.
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseJaCoCoXml(raw: string, sourceFile: string, _cwd: string): Coverage | null;
|
|
39
|
+
/**
|
|
40
|
+
* Standard JaCoCo report locations across JVM build tools and project
|
|
41
|
+
* layouts:
|
|
42
|
+
*
|
|
43
|
+
* GRADLE (kotlin + java):
|
|
44
|
+
* - app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml
|
|
45
|
+
* (Android default — `app` module, `jacocoTestReport` task)
|
|
46
|
+
* - build/reports/jacoco/test/jacocoTestReport.xml
|
|
47
|
+
* (plain JVM via the `jacoco` plugin's default `test` task)
|
|
48
|
+
* - build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml
|
|
49
|
+
* (multi-module aggregate; many builds rename the task)
|
|
50
|
+
*
|
|
51
|
+
* MAVEN (java):
|
|
52
|
+
* - target/site/jacoco/jacoco.xml
|
|
53
|
+
* (default Maven JaCoCo plugin — single-module Java)
|
|
54
|
+
* - target/site/jacoco-aggregate/jacoco.xml
|
|
55
|
+
* (Maven multi-module aggregate via jacoco-maven-plugin's
|
|
56
|
+
* `report-aggregate` goal)
|
|
57
|
+
*
|
|
58
|
+
* FALLBACKS:
|
|
59
|
+
* - jacocoTestReport.xml (top-level — fixture / direct path)
|
|
60
|
+
* - jacoco.xml (top-level — Maven fixture / direct path)
|
|
61
|
+
*
|
|
62
|
+
* Returns the first existing path, relative to cwd. Conservative
|
|
63
|
+
* priority: most specific build-tool conventions first, root
|
|
64
|
+
* fallbacks last.
|
|
65
|
+
*/
|
|
66
|
+
export declare function findJaCoCoReport(cwd: string): string | null;
|
|
67
|
+
/**
|
|
68
|
+
* Locate + parse the JaCoCo XML report under cwd, wrap the result in a
|
|
69
|
+
* `CoverageResult` envelope. Identical glue across JVM packs (kotlin,
|
|
70
|
+
* java) — no language-specific dispatch needed because JaCoCo's
|
|
71
|
+
* `<sourcefile name>` carries the on-disk filename verbatim and the
|
|
72
|
+
* file extension survives intact through the parser. Both packs'
|
|
73
|
+
* `coverageProvider.gather` should delegate here.
|
|
74
|
+
*/
|
|
75
|
+
export declare function gatherJaCoCoCoverageResult(cwd: string): CoverageResult | null;
|
|
76
|
+
//# sourceMappingURL=jacoco.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jacoco.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/jacoco.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,QAAQ,EAA6B,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAmE7F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB3D;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAY7E"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.parseJaCoCoXml = parseJaCoCoXml;
|
|
37
|
+
exports.findJaCoCoReport = findJaCoCoReport;
|
|
38
|
+
exports.gatherJaCoCoCoverageResult = gatherJaCoCoCoverageResult;
|
|
39
|
+
/**
|
|
40
|
+
* JaCoCo XML report parser + standard-location finder. Shared across
|
|
41
|
+
* JVM-language packs (kotlin, java) — single source of truth per
|
|
42
|
+
* CLAUDE.md rule #2 ("Each tool has ONE gather function … if another
|
|
43
|
+
* module needs that tool's output, it MUST call the existing
|
|
44
|
+
* function").
|
|
45
|
+
*
|
|
46
|
+
* Extracted from `src/languages/kotlin.ts` in 10k.1.2 (Phase 10k.1
|
|
47
|
+
* SSOT validation) — when the Java pack needed JaCoCo coverage, the
|
|
48
|
+
* parser was already generic (kotlin's own tests cover it against
|
|
49
|
+
* Java source, see test/languages-kotlin.test.ts). Forking would
|
|
50
|
+
* have been the architectural violation; relocating to a shared
|
|
51
|
+
* tool module is the correct outcome.
|
|
52
|
+
*/
|
|
53
|
+
const fs = __importStar(require("fs"));
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
const coverage_1 = require("./coverage");
|
|
56
|
+
/**
|
|
57
|
+
* Pure parser for JaCoCo's XML report (DTD: `report.dtd`). The structure:
|
|
58
|
+
*
|
|
59
|
+
* <report name="...">
|
|
60
|
+
* <package name="com/example">
|
|
61
|
+
* <class name="com/example/Foo" sourcefilename="Foo.kt">...</class>
|
|
62
|
+
* <sourcefile name="Foo.kt">
|
|
63
|
+
* <line nr="N" mi="..." ci="..." mb="..." cb="..."/>
|
|
64
|
+
* <counter type="LINE" missed="X" covered="Y"/>
|
|
65
|
+
* </sourcefile>
|
|
66
|
+
* <counter type="LINE" missed="X" covered="Y"/>
|
|
67
|
+
* </package>
|
|
68
|
+
* <counter type="LINE" missed="X" covered="Y"/>
|
|
69
|
+
* </report>
|
|
70
|
+
*
|
|
71
|
+
* Per-file coverage comes from `<sourcefile>` blocks: their LINE counter
|
|
72
|
+
* holds the file's missed/covered totals. Project-level total comes from
|
|
73
|
+
* the top-level `<counter type="LINE">` (last in the document).
|
|
74
|
+
*
|
|
75
|
+
* Path attribution joins `<package name>` (forward-slashed, JVM-style)
|
|
76
|
+
* with `<sourcefile name>` to produce the canonical relative path the
|
|
77
|
+
* downstream consumers expect (`com/example/Foo.kt` or
|
|
78
|
+
* `com/example/Foo.java`). JVM bytecode namespacing isn't 1:1 with
|
|
79
|
+
* on-disk source paths in multi-module projects — accepted limitation
|
|
80
|
+
* (matches C#'s cobertura attribution).
|
|
81
|
+
*
|
|
82
|
+
* Returns null when no `<counter type="LINE">` exists at the top level
|
|
83
|
+
* — that's JaCoCo's "no coverage data" signal, distinct from "0%
|
|
84
|
+
* coverage" (where the counter exists with covered=0).
|
|
85
|
+
*
|
|
86
|
+
* Language-agnostic: works for Kotlin (.kt), Java (.java), and any
|
|
87
|
+
* other JVM language whose JaCoCo output respects the `<package>` /
|
|
88
|
+
* `<sourcefile>` shape — `<sourcefile name>` carries the on-disk
|
|
89
|
+
* filename verbatim so the parser doesn't need to know the language.
|
|
90
|
+
*/
|
|
91
|
+
function parseJaCoCoXml(raw, sourceFile, _cwd) {
|
|
92
|
+
const files = new Map();
|
|
93
|
+
// Iterate <package> blocks. Each block contains <sourcefile> children
|
|
94
|
+
// we tally and aggregate counters we can ignore (they're sums of the
|
|
95
|
+
// children, redundant given we sum the children ourselves).
|
|
96
|
+
const packageRe = /<package\s+name="([^"]+)">([\s\S]*?)<\/package>/g;
|
|
97
|
+
let pm;
|
|
98
|
+
while ((pm = packageRe.exec(raw)) !== null) {
|
|
99
|
+
const pkgPath = pm[1].replace(/\\/g, '/'); // JVM uses forward-slashes already; defensive
|
|
100
|
+
const pkgInner = pm[2];
|
|
101
|
+
// Within a <package>, <sourcefile> blocks own per-file counters.
|
|
102
|
+
const sourceFileRe = /<sourcefile\s+name="([^"]+)">([\s\S]*?)<\/sourcefile>/g;
|
|
103
|
+
let sm;
|
|
104
|
+
while ((sm = sourceFileRe.exec(pkgInner)) !== null) {
|
|
105
|
+
const fileName = sm[1];
|
|
106
|
+
const sourceInner = sm[2];
|
|
107
|
+
// The LAST <counter type="LINE"> in <sourcefile> is the
|
|
108
|
+
// file-level aggregate; earlier ones are per-method. We pick the
|
|
109
|
+
// last to get the full-file roll-up.
|
|
110
|
+
const counterRe = /<counter\s+type="LINE"\s+missed="(\d+)"\s+covered="(\d+)"\s*\/>/g;
|
|
111
|
+
let lastMissed = 0;
|
|
112
|
+
let lastCovered = 0;
|
|
113
|
+
let cm;
|
|
114
|
+
while ((cm = counterRe.exec(sourceInner)) !== null) {
|
|
115
|
+
lastMissed = parseInt(cm[1], 10);
|
|
116
|
+
lastCovered = parseInt(cm[2], 10);
|
|
117
|
+
}
|
|
118
|
+
const total = lastMissed + lastCovered;
|
|
119
|
+
const rel = pkgPath ? `${pkgPath}/${fileName}` : fileName;
|
|
120
|
+
files.set(rel, {
|
|
121
|
+
path: rel,
|
|
122
|
+
covered: lastCovered,
|
|
123
|
+
total,
|
|
124
|
+
pct: (0, coverage_1.round1)(total > 0 ? (lastCovered / total) * 100 : 0),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Top-level project-wide LINE counter — JaCoCo emits it after the
|
|
129
|
+
// last </package>. Use a non-greedy match against the document tail
|
|
130
|
+
// to avoid grabbing per-package counters as project-level.
|
|
131
|
+
const tailMatch = raw.match(/<\/package>\s*<counter\s+type="LINE"\s+missed="(\d+)"\s+covered="(\d+)"\s*\/>\s*<\/report>/);
|
|
132
|
+
let totalMissed = 0;
|
|
133
|
+
let totalCovered = 0;
|
|
134
|
+
if (tailMatch) {
|
|
135
|
+
totalMissed = parseInt(tailMatch[1], 10);
|
|
136
|
+
totalCovered = parseInt(tailMatch[2], 10);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// No project-level counter (degenerate report — single package, no
|
|
140
|
+
// explicit roll-up). Sum the per-file totals as the linePercent
|
|
141
|
+
// basis.
|
|
142
|
+
for (const f of files.values()) {
|
|
143
|
+
totalCovered += f.covered;
|
|
144
|
+
totalMissed += f.total - f.covered;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const grandTotal = totalCovered + totalMissed;
|
|
148
|
+
if (grandTotal === 0 && files.size === 0)
|
|
149
|
+
return null;
|
|
150
|
+
return {
|
|
151
|
+
source: 'jacoco',
|
|
152
|
+
sourceFile,
|
|
153
|
+
linePercent: (0, coverage_1.round1)(grandTotal > 0 ? (totalCovered / grandTotal) * 100 : 0),
|
|
154
|
+
files,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Standard JaCoCo report locations across JVM build tools and project
|
|
159
|
+
* layouts:
|
|
160
|
+
*
|
|
161
|
+
* GRADLE (kotlin + java):
|
|
162
|
+
* - app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml
|
|
163
|
+
* (Android default — `app` module, `jacocoTestReport` task)
|
|
164
|
+
* - build/reports/jacoco/test/jacocoTestReport.xml
|
|
165
|
+
* (plain JVM via the `jacoco` plugin's default `test` task)
|
|
166
|
+
* - build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml
|
|
167
|
+
* (multi-module aggregate; many builds rename the task)
|
|
168
|
+
*
|
|
169
|
+
* MAVEN (java):
|
|
170
|
+
* - target/site/jacoco/jacoco.xml
|
|
171
|
+
* (default Maven JaCoCo plugin — single-module Java)
|
|
172
|
+
* - target/site/jacoco-aggregate/jacoco.xml
|
|
173
|
+
* (Maven multi-module aggregate via jacoco-maven-plugin's
|
|
174
|
+
* `report-aggregate` goal)
|
|
175
|
+
*
|
|
176
|
+
* FALLBACKS:
|
|
177
|
+
* - jacocoTestReport.xml (top-level — fixture / direct path)
|
|
178
|
+
* - jacoco.xml (top-level — Maven fixture / direct path)
|
|
179
|
+
*
|
|
180
|
+
* Returns the first existing path, relative to cwd. Conservative
|
|
181
|
+
* priority: most specific build-tool conventions first, root
|
|
182
|
+
* fallbacks last.
|
|
183
|
+
*/
|
|
184
|
+
function findJaCoCoReport(cwd) {
|
|
185
|
+
const candidates = [
|
|
186
|
+
// Gradle (Android + plain JVM)
|
|
187
|
+
'app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml',
|
|
188
|
+
'build/reports/jacoco/test/jacocoTestReport.xml',
|
|
189
|
+
'build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml',
|
|
190
|
+
// Maven (single-module + multi-module aggregate)
|
|
191
|
+
'target/site/jacoco/jacoco.xml',
|
|
192
|
+
'target/site/jacoco-aggregate/jacoco.xml',
|
|
193
|
+
// Direct-path fallbacks (fixture / hand-placed)
|
|
194
|
+
'jacocoTestReport.xml',
|
|
195
|
+
'jacoco.xml',
|
|
196
|
+
];
|
|
197
|
+
for (const rel of candidates) {
|
|
198
|
+
const abs = path.join(cwd, rel);
|
|
199
|
+
if (fs.existsSync(abs))
|
|
200
|
+
return rel;
|
|
201
|
+
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Locate + parse the JaCoCo XML report under cwd, wrap the result in a
|
|
206
|
+
* `CoverageResult` envelope. Identical glue across JVM packs (kotlin,
|
|
207
|
+
* java) — no language-specific dispatch needed because JaCoCo's
|
|
208
|
+
* `<sourcefile name>` carries the on-disk filename verbatim and the
|
|
209
|
+
* file extension survives intact through the parser. Both packs'
|
|
210
|
+
* `coverageProvider.gather` should delegate here.
|
|
211
|
+
*/
|
|
212
|
+
function gatherJaCoCoCoverageResult(cwd) {
|
|
213
|
+
const reportRel = findJaCoCoReport(cwd);
|
|
214
|
+
if (!reportRel)
|
|
215
|
+
return null;
|
|
216
|
+
let raw;
|
|
217
|
+
try {
|
|
218
|
+
raw = fs.readFileSync(path.join(cwd, reportRel), 'utf-8');
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
const coverage = parseJaCoCoXml(raw, reportRel, cwd);
|
|
224
|
+
if (!coverage)
|
|
225
|
+
return null;
|
|
226
|
+
return { schemaVersion: 1, tool: `coverage:${coverage.source}`, coverage };
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=jacoco.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jacoco.js","sourceRoot":"","sources":["../../../src/analyzers/tools/jacoco.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The `jscpdProvider` is registered in `GLOBAL_CAPABILITIES.duplication`
|
|
5
5
|
* (src/languages/capabilities/global.ts). jscpd runs once per repo with
|
|
6
|
-
* a
|
|
7
|
-
* via the `--gitignore` flag — crucial on large repos,
|
|
8
|
-
* it walks into `node_modules` and OOMs.
|
|
6
|
+
* a cross-language source-file pattern and respects the project's
|
|
7
|
+
* `.gitignore` via the `--gitignore` flag — crucial on large repos,
|
|
8
|
+
* jscpd without it walks into `node_modules` and OOMs.
|
|
9
9
|
*
|
|
10
|
-
* The source-file pattern is
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* The source-file pattern is the union of every pack's
|
|
11
|
+
* `sourceExtensions` (LP-recipe pattern, Phase 10i.0-LP). jscpd's
|
|
12
|
+
* tokenizer is language-aware so a single union glob is safe; pack-
|
|
13
|
+
* driven derivation keeps adding a new language to a one-line scaffold
|
|
14
|
+
* change rather than a cross-cutting edit here.
|
|
14
15
|
*/
|
|
15
16
|
import type { CapabilityProvider } from '../../languages/capabilities/provider';
|
|
16
17
|
import type { DuplicationResult } from '../../languages/capabilities/types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jscpd.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/jscpd.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"jscpd.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/jscpd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAsB9F;;;;;GAKG;AACH,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,iBAAiB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA8C5C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,wBAAwB,CAsCvE;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,kBAAkB,CAAC,iBAAiB,CAM/D,CAAC"}
|
|
@@ -4,27 +4,43 @@
|
|
|
4
4
|
*
|
|
5
5
|
* The `jscpdProvider` is registered in `GLOBAL_CAPABILITIES.duplication`
|
|
6
6
|
* (src/languages/capabilities/global.ts). jscpd runs once per repo with
|
|
7
|
-
* a
|
|
8
|
-
* via the `--gitignore` flag — crucial on large repos,
|
|
9
|
-
* it walks into `node_modules` and OOMs.
|
|
7
|
+
* a cross-language source-file pattern and respects the project's
|
|
8
|
+
* `.gitignore` via the `--gitignore` flag — crucial on large repos,
|
|
9
|
+
* jscpd without it walks into `node_modules` and OOMs.
|
|
10
10
|
*
|
|
11
|
-
* The source-file pattern is
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* The source-file pattern is the union of every pack's
|
|
12
|
+
* `sourceExtensions` (LP-recipe pattern, Phase 10i.0-LP). jscpd's
|
|
13
|
+
* tokenizer is language-aware so a single union glob is safe; pack-
|
|
14
|
+
* driven derivation keeps adding a new language to a one-line scaffold
|
|
15
|
+
* change rather than a cross-cutting edit here.
|
|
15
16
|
*/
|
|
16
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
18
|
exports.jscpdProvider = void 0;
|
|
18
19
|
exports.gatherJscpdResult = gatherJscpdResult;
|
|
20
|
+
const languages_1 = require("../../languages");
|
|
19
21
|
const runner_1 = require("./runner");
|
|
20
22
|
const tool_registry_1 = require("./tool-registry");
|
|
21
23
|
/**
|
|
22
|
-
* Union of source extensions across all language packs
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
24
|
+
* Union of source extensions across all language packs, derived
|
|
25
|
+
* pack-side. Iterates LANGUAGES fresh on every call so a new pack lands
|
|
26
|
+
* in the glob without an edit here (matches `allSourceExtensions`'s
|
|
27
|
+
* pattern from Phase 10i.0-LP.3). A union pattern (rather than per-pack
|
|
28
|
+
* invocation) so mixed-stack repos pay for one jscpd run, not N.
|
|
29
|
+
*
|
|
30
|
+
* Note: returns a function so the registry mutation in
|
|
31
|
+
* `test/recipe-playbook.test.ts` (which appends a synthetic pack to
|
|
32
|
+
* LANGUAGES) takes effect — module-load capture would freeze the union
|
|
33
|
+
* before the test injection.
|
|
26
34
|
*/
|
|
27
|
-
|
|
35
|
+
function buildJscpdPattern() {
|
|
36
|
+
const exts = new Set();
|
|
37
|
+
for (const lang of languages_1.LANGUAGES) {
|
|
38
|
+
for (const e of lang.sourceExtensions) {
|
|
39
|
+
exts.add(e.replace(/^\./, ''));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return `**/*.{${[...exts].sort().join(',')}}`;
|
|
43
|
+
}
|
|
28
44
|
/** Extract the top N clone pairs sorted largest-first. */
|
|
29
45
|
function topClonesFrom(duplicates, limit = 15) {
|
|
30
46
|
return duplicates
|
|
@@ -55,7 +71,8 @@ function gatherJscpdResult(cwd) {
|
|
|
55
71
|
if (!status.available || !status.path)
|
|
56
72
|
return { kind: 'unavailable', reason: 'not installed' };
|
|
57
73
|
const reportDir = `/tmp/dxkit-jscpd-${Date.now()}`;
|
|
58
|
-
|
|
74
|
+
const pattern = buildJscpdPattern();
|
|
75
|
+
(0, runner_1.run)(`${status.path} --reporters json --output '${reportDir}' --gitignore --pattern '${pattern}' --min-lines 5 --min-tokens 50 '${cwd}' > /dev/null 2>&1`, cwd, 300000);
|
|
59
76
|
const reportRaw = (0, runner_1.run)(`cat '${reportDir}/jscpd-report.json' 2>/dev/null`, cwd);
|
|
60
77
|
(0, runner_1.run)(`rm -rf '${reportDir}'`, cwd);
|
|
61
78
|
if (!reportRaw)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jscpd.js","sourceRoot":"","sources":["../../../src/analyzers/tools/jscpd.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"jscpd.js","sourceRoot":"","sources":["../../../src/analyzers/tools/jscpd.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,26 @@ import type { DepVulnFinding, DepVulnUpgradePlan } from '../../languages/capabil
|
|
|
32
32
|
*
|
|
33
33
|
* Never throws. `gatherTsDepVulnsResult` calls this unconditionally and
|
|
34
34
|
* treats the empty map as "no enrichment available".
|
|
35
|
+
*
|
|
36
|
+
* **TEMP-DIR ISOLATION (10k.1.5b fix — discovered during 2.4.5 pre-ship
|
|
37
|
+
* regression):** osv-scanner v2's `fix` subcommand invokes `npm install`
|
|
38
|
+
* internally to compute upgrade patches. That `npm install` MUTATES the
|
|
39
|
+
* cwd's node_modules — wipes it then reinstalls (often with
|
|
40
|
+
* `--legacy-peer-deps` fallback if the project's deps don't resolve
|
|
41
|
+
* cleanly). On dxkit's own repo this caused subsequent dxkit subcommand
|
|
42
|
+
* invocations to crash with `Cannot find module 'hosted-git-info'`
|
|
43
|
+
* because osv-scanner's reinstall left an incomplete tree. On
|
|
44
|
+
* vyuhlabs-platform (835MB node_modules) the reinstall happened to
|
|
45
|
+
* succeed but still mutated state silently — a 5-month-old data-mutation
|
|
46
|
+
* bug shipped since 2.4.0 / Phase 10h.6 and only caught now because
|
|
47
|
+
* 2.4.5 pre-ship regression ran reports back-to-back on dxkit's own repo
|
|
48
|
+
* and tripped the chain.
|
|
49
|
+
*
|
|
50
|
+
* Mitigation: we copy `package.json` + `package-lock.json` to a fresh
|
|
51
|
+
* temp dir, run osv-scanner there, and discard the temp dir afterward.
|
|
52
|
+
* Output JSON identifies advisories by `(package, version, id)` tuples
|
|
53
|
+
* which are independent of cwd, so the upgrade-plan map we return is
|
|
54
|
+
* unchanged. The caller's project gets read-only treatment.
|
|
35
55
|
*/
|
|
36
56
|
export declare function gatherOsvScannerFixPlans(cwd: string): Promise<Map<string, DepVulnUpgradePlan>>;
|
|
37
57
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"osv-scanner-fix.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/osv-scanner-fix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"osv-scanner-fix.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/osv-scanner-fix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAsC7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAwC1C;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAwCrF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GACrC,MAAM,CAaR;AAED;;;;;;;4BAO4B;AAC5B,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEhF"}
|