@vyuhlabs/dxkit 2.4.2 → 2.4.4

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.
Files changed (90) hide show
  1. package/CHANGELOG.md +296 -0
  2. package/README.md +9 -1
  3. package/dist/analyzers/health.js +9 -9
  4. package/dist/analyzers/health.js.map +1 -1
  5. package/dist/analyzers/licenses/gather.js +1 -1
  6. package/dist/analyzers/licenses/gather.js.map +1 -1
  7. package/dist/analyzers/quality/gather.js +2 -2
  8. package/dist/analyzers/quality/gather.js.map +1 -1
  9. package/dist/analyzers/security/gather.d.ts.map +1 -1
  10. package/dist/analyzers/security/gather.js +11 -2
  11. package/dist/analyzers/security/gather.js.map +1 -1
  12. package/dist/analyzers/tests/import-graph.d.ts.map +1 -1
  13. package/dist/analyzers/tests/import-graph.js +5 -0
  14. package/dist/analyzers/tests/import-graph.js.map +1 -1
  15. package/dist/analyzers/tests/index.d.ts.map +1 -1
  16. package/dist/analyzers/tests/index.js +2 -0
  17. package/dist/analyzers/tests/index.js.map +1 -1
  18. package/dist/analyzers/tests/types.d.ts +12 -2
  19. package/dist/analyzers/tests/types.d.ts.map +1 -1
  20. package/dist/analyzers/tools/coverage.d.ts +5 -16
  21. package/dist/analyzers/tools/coverage.d.ts.map +1 -1
  22. package/dist/analyzers/tools/coverage.js +9 -201
  23. package/dist/analyzers/tools/coverage.js.map +1 -1
  24. package/dist/analyzers/tools/generic.d.ts.map +1 -1
  25. package/dist/analyzers/tools/generic.js +21 -4
  26. package/dist/analyzers/tools/generic.js.map +1 -1
  27. package/dist/analyzers/tools/graphify.js +2 -2
  28. package/dist/analyzers/tools/grep-secrets.d.ts.map +1 -1
  29. package/dist/analyzers/tools/grep-secrets.js +10 -1
  30. package/dist/analyzers/tools/grep-secrets.js.map +1 -1
  31. package/dist/analyzers/tools/jscpd.d.ts +8 -7
  32. package/dist/analyzers/tools/jscpd.d.ts.map +1 -1
  33. package/dist/analyzers/tools/jscpd.js +30 -13
  34. package/dist/analyzers/tools/jscpd.js.map +1 -1
  35. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
  36. package/dist/analyzers/tools/tool-registry.js +31 -20
  37. package/dist/analyzers/tools/tool-registry.js.map +1 -1
  38. package/dist/constants.d.ts +5 -3
  39. package/dist/constants.d.ts.map +1 -1
  40. package/dist/constants.js +41 -17
  41. package/dist/constants.js.map +1 -1
  42. package/dist/detect.d.ts.map +1 -1
  43. package/dist/detect.js +15 -16
  44. package/dist/detect.js.map +1 -1
  45. package/dist/doctor.d.ts.map +1 -1
  46. package/dist/doctor.js +10 -16
  47. package/dist/doctor.js.map +1 -1
  48. package/dist/generator.d.ts.map +1 -1
  49. package/dist/generator.js +41 -75
  50. package/dist/generator.js.map +1 -1
  51. package/dist/languages/capabilities/index.d.ts +21 -12
  52. package/dist/languages/capabilities/index.d.ts.map +1 -1
  53. package/dist/languages/capabilities/index.js +47 -13
  54. package/dist/languages/capabilities/index.js.map +1 -1
  55. package/dist/languages/csharp.d.ts.map +1 -1
  56. package/dist/languages/csharp.js +18 -0
  57. package/dist/languages/csharp.js.map +1 -1
  58. package/dist/languages/go.d.ts +10 -0
  59. package/dist/languages/go.d.ts.map +1 -1
  60. package/dist/languages/go.js +89 -1
  61. package/dist/languages/go.js.map +1 -1
  62. package/dist/languages/index.d.ts +42 -1
  63. package/dist/languages/index.d.ts.map +1 -1
  64. package/dist/languages/index.js +57 -1
  65. package/dist/languages/index.js.map +1 -1
  66. package/dist/languages/kotlin.d.ts +103 -0
  67. package/dist/languages/kotlin.d.ts.map +1 -0
  68. package/dist/languages/kotlin.js +676 -0
  69. package/dist/languages/kotlin.js.map +1 -0
  70. package/dist/languages/python.d.ts +3 -0
  71. package/dist/languages/python.d.ts.map +1 -1
  72. package/dist/languages/python.js +55 -1
  73. package/dist/languages/python.js.map +1 -1
  74. package/dist/languages/rust.d.ts.map +1 -1
  75. package/dist/languages/rust.js +8 -0
  76. package/dist/languages/rust.js.map +1 -1
  77. package/dist/languages/types.d.ts +69 -1
  78. package/dist/languages/types.d.ts.map +1 -1
  79. package/dist/languages/typescript.d.ts +5 -0
  80. package/dist/languages/typescript.d.ts.map +1 -1
  81. package/dist/languages/typescript.js +72 -2
  82. package/dist/languages/typescript.js.map +1 -1
  83. package/dist/project-yaml.d.ts.map +1 -1
  84. package/dist/project-yaml.js +19 -15
  85. package/dist/project-yaml.js.map +1 -1
  86. package/dist/types.d.ts +42 -15
  87. package/dist/types.d.ts.map +1 -1
  88. package/package.json +2 -1
  89. package/templates/.claude/rules/kotlin.md +11 -0
  90. package/templates/configs/kotlin/README.md +6 -0
@@ -14,8 +14,18 @@ export interface SourceFile {
14
14
  risk: RiskTier;
15
15
  hasMatchingTest: boolean;
16
16
  }
17
- /** Where the `effectiveCoverage` number came from. */
18
- export type CoverageSource = 'filename-match' | 'import-graph' | 'istanbul-summary' | 'istanbul-final' | 'coverage-py' | 'go' | 'cobertura' | 'lcov';
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,sDAAsD;AACtD,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,cAAc,GACd,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,GACb,IAAI,GACJ,WAAW,GACX,MAAM,CAAC;AAEX,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"}
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;
@@ -51,19 +51,8 @@ export interface Coverage {
51
51
  * now (would need per-language file weighting).
52
52
  */
53
53
  export declare function loadCoverage(cwd: string): Promise<Coverage | null>;
54
- /** Istanbul coverage-summary.json: `{ "total": {...}, "/abs/path": {...} }`. */
55
- export declare function parseIstanbulSummary(raw: string, sourceFile: string, cwd: string): Coverage;
56
- /** Istanbul coverage-final.json: `{ "/abs/path": { s: { "0": 1, "1": 0, ... }, statementMap: {...} } }`. */
57
- export declare function parseIstanbulFinal(raw: string, sourceFile: string, cwd: string): Coverage;
58
- /** coverage.py JSON: `{ "totals": {...}, "files": { "path": { summary: {...} } } }`. */
59
- export declare function parseCoveragePy(raw: string, sourceFile: string, cwd: string): Coverage;
60
- /**
61
- * Go coverprofile:
62
- * mode: set
63
- * pkg/path/file.go:5.2,10.1 3 1
64
- *
65
- * Each line: file:startLine.col,endLine.col numStatements count.
66
- * A block is covered iff count > 0.
67
- */
68
- export declare function parseGoCoverProfile(raw: string, sourceFile: string, cwd: string): Coverage;
54
+ /** Round to one decimal place. Used by every coverage parser for the linePercent contract. */
55
+ export declare function round1(n: number): number;
56
+ /** Turn an absolute or prefixed coverage path into a project-relative path. */
57
+ export declare function toRelative(p: string, cwd: string): string;
69
58
  //# sourceMappingURL=coverage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAWH,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,GACb,IAAI,GACJ,WAAW,GACX,MAAM,CAAC;AAEX,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;AAID,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CA6B3F;AAMD,4GAA4G;AAC5G,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CA6BzF;AAOD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAsCtF;AAiBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAwC1F"}
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"}
@@ -20,47 +20,10 @@
20
20
  * artifact exists or parsing fails; callers (tests analyzer) should
21
21
  * treat a null return as "fall back to filename matching."
22
22
  */
23
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
24
- if (k2 === undefined) k2 = k;
25
- var desc = Object.getOwnPropertyDescriptor(m, k);
26
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
27
- desc = { enumerable: true, get: function() { return m[k]; } };
28
- }
29
- Object.defineProperty(o, k2, desc);
30
- }) : (function(o, m, k, k2) {
31
- if (k2 === undefined) k2 = k;
32
- o[k2] = m[k];
33
- }));
34
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
35
- Object.defineProperty(o, "default", { enumerable: true, value: v });
36
- }) : function(o, v) {
37
- o["default"] = v;
38
- });
39
- var __importStar = (this && this.__importStar) || (function () {
40
- var ownKeys = function(o) {
41
- ownKeys = Object.getOwnPropertyNames || function (o) {
42
- var ar = [];
43
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
44
- return ar;
45
- };
46
- return ownKeys(o);
47
- };
48
- return function (mod) {
49
- if (mod && mod.__esModule) return mod;
50
- var result = {};
51
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
52
- __setModuleDefault(result, mod);
53
- return result;
54
- };
55
- })();
56
23
  Object.defineProperty(exports, "__esModule", { value: true });
57
24
  exports.loadCoverage = loadCoverage;
58
- exports.parseIstanbulSummary = parseIstanbulSummary;
59
- exports.parseIstanbulFinal = parseIstanbulFinal;
60
- exports.parseCoveragePy = parseCoveragePy;
61
- exports.parseGoCoverProfile = parseGoCoverProfile;
62
- const fs = __importStar(require("fs"));
63
- const path = __importStar(require("path"));
25
+ exports.round1 = round1;
26
+ exports.toRelative = toRelative;
64
27
  const languages_1 = require("../../languages");
65
28
  const descriptors_1 = require("../../languages/capabilities/descriptors");
66
29
  const dispatcher_1 = require("../dispatcher");
@@ -85,151 +48,14 @@ async function loadCoverage(cwd) {
85
48
  const envelope = await dispatcher_1.defaultDispatcher.gather(cwd, descriptors_1.COVERAGE, providers);
86
49
  return envelope?.coverage ?? null;
87
50
  }
88
- // ─── Parsers ────────────────────────────────────────────────────────────────
89
- /** Istanbul coverage-summary.json: `{ "total": {...}, "/abs/path": {...} }`. */
90
- function parseIstanbulSummary(raw, sourceFile, cwd) {
91
- const data = JSON.parse(raw);
92
- const files = new Map();
93
- let totalCovered = 0;
94
- let totalLines = 0;
95
- for (const [key, entry] of Object.entries(data)) {
96
- if (key === 'total')
97
- continue;
98
- const lines = entry?.lines;
99
- if (!lines || typeof lines.covered !== 'number' || typeof lines.total !== 'number')
100
- continue;
101
- const rel = toRelative(key, cwd);
102
- const fc = {
103
- path: rel,
104
- covered: lines.covered,
105
- total: lines.total,
106
- pct: round1(lines.total > 0 ? (lines.covered / lines.total) * 100 : 0),
107
- };
108
- files.set(rel, fc);
109
- totalCovered += lines.covered;
110
- totalLines += lines.total;
111
- }
112
- const total = data.total?.lines;
113
- const linePercent = total && typeof total.pct === 'number'
114
- ? round1(total.pct)
115
- : round1(totalLines > 0 ? (totalCovered / totalLines) * 100 : 0);
116
- return { source: 'istanbul-summary', sourceFile, linePercent, files };
117
- }
118
- /** Istanbul coverage-final.json: `{ "/abs/path": { s: { "0": 1, "1": 0, ... }, statementMap: {...} } }`. */
119
- function parseIstanbulFinal(raw, sourceFile, cwd) {
120
- const data = JSON.parse(raw);
121
- const files = new Map();
122
- let totalCovered = 0;
123
- let totalStatements = 0;
124
- for (const [key, entry] of Object.entries(data)) {
125
- const s = entry?.s;
126
- if (!s || typeof s !== 'object')
127
- continue;
128
- const counts = Object.values(s);
129
- const total = counts.length;
130
- const covered = counts.filter((n) => typeof n === 'number' && n > 0).length;
131
- const rel = toRelative(entry.path || key, cwd);
132
- files.set(rel, {
133
- path: rel,
134
- covered,
135
- total,
136
- pct: round1(total > 0 ? (covered / total) * 100 : 0),
137
- });
138
- totalCovered += covered;
139
- totalStatements += total;
140
- }
141
- return {
142
- source: 'istanbul-final',
143
- sourceFile,
144
- linePercent: round1(totalStatements > 0 ? (totalCovered / totalStatements) * 100 : 0),
145
- files,
146
- };
147
- }
148
- /** coverage.py JSON: `{ "totals": {...}, "files": { "path": { summary: {...} } } }`. */
149
- function parseCoveragePy(raw, sourceFile, cwd) {
150
- const data = JSON.parse(raw);
151
- const files = new Map();
152
- let totalCovered = 0;
153
- let totalStatements = 0;
154
- for (const [key, entry] of Object.entries(data.files ?? {})) {
155
- const summary = entry?.summary;
156
- if (!summary)
157
- continue;
158
- const total = typeof summary.num_statements === 'number' ? summary.num_statements : 0;
159
- const missing = typeof summary.missing_lines === 'number' ? summary.missing_lines : 0;
160
- const covered = typeof summary.covered_lines === 'number'
161
- ? summary.covered_lines
162
- : Math.max(0, total - missing);
163
- const rel = toRelative(key, cwd);
164
- files.set(rel, {
165
- path: rel,
166
- covered,
167
- total,
168
- pct: round1(typeof summary.percent_covered === 'number'
169
- ? summary.percent_covered
170
- : total > 0
171
- ? (covered / total) * 100
172
- : 0),
173
- });
174
- totalCovered += covered;
175
- totalStatements += total;
176
- }
177
- const linePercent = typeof data.totals?.percent_covered === 'number'
178
- ? round1(data.totals.percent_covered)
179
- : round1(totalStatements > 0 ? (totalCovered / totalStatements) * 100 : 0);
180
- return { source: 'coverage-py', sourceFile, linePercent, files };
181
- }
182
- /**
183
- * Go coverprofile:
184
- * mode: set
185
- * pkg/path/file.go:5.2,10.1 3 1
186
- *
187
- * Each line: file:startLine.col,endLine.col numStatements count.
188
- * A block is covered iff count > 0.
189
- */
190
- function parseGoCoverProfile(raw, sourceFile, cwd) {
191
- const perFile = new Map();
192
- let totalCovered = 0;
193
- let totalStatements = 0;
194
- for (const line of raw.split('\n')) {
195
- if (!line || line.startsWith('mode:'))
196
- continue;
197
- // file:startLine.col,endLine.col numStatements count
198
- const m = line.match(/^(.+):\d+\.\d+,\d+\.\d+\s+(\d+)\s+(\d+)$/);
199
- if (!m)
200
- continue;
201
- const file = m[1];
202
- const stmts = parseInt(m[2], 10);
203
- const count = parseInt(m[3], 10);
204
- const bucket = perFile.get(file) ?? { covered: 0, total: 0 };
205
- bucket.total += stmts;
206
- if (count > 0)
207
- bucket.covered += stmts;
208
- perFile.set(file, bucket);
209
- totalStatements += stmts;
210
- if (count > 0)
211
- totalCovered += stmts;
212
- }
213
- const files = new Map();
214
- for (const [key, { covered, total }] of perFile) {
215
- // Go coverprofile uses module-relative paths (e.g. github.com/user/repo/pkg/foo.go).
216
- // Strip the module prefix if it resolves to a real file in cwd.
217
- const rel = resolveGoPath(key, cwd);
218
- files.set(rel, {
219
- path: rel,
220
- covered,
221
- total,
222
- pct: round1(total > 0 ? (covered / total) * 100 : 0),
223
- });
224
- }
225
- return {
226
- source: 'go',
227
- sourceFile,
228
- linePercent: round1(totalStatements > 0 ? (totalCovered / totalStatements) * 100 : 0),
229
- files,
230
- };
231
- }
232
51
  // ─── Helpers ────────────────────────────────────────────────────────────────
52
+ //
53
+ // Per-language parsers (Istanbul/coverage.py/Go cover-profile/lcov/cobertura)
54
+ // moved into their respective `src/languages/<id>.ts` packs in Phase
55
+ // 10i.0-LP.4. coverage.ts now hosts only the shared types + small
56
+ // utilities the parsers depend on. Adding a 6th language's coverage
57
+ // format is a pack-local change — no edits to this file required.
58
+ /** Round to one decimal place. Used by every coverage parser for the linePercent contract. */
233
59
  function round1(n) {
234
60
  return Math.round(n * 10) / 10;
235
61
  }
@@ -247,22 +73,4 @@ function toRelative(p, cwd) {
247
73
  out = out.slice(2);
248
74
  return out;
249
75
  }
250
- /**
251
- * Go coverprofile paths look like `github.com/user/repo/pkg/foo.go`. If that
252
- * file doesn't exist at cwd, try stripping leading segments until we find one
253
- * that does. Fall back to the original string if nothing resolves.
254
- */
255
- function resolveGoPath(p, cwd) {
256
- const norm = p.replace(/\\/g, '/');
257
- // Already relative and exists?
258
- if (fs.existsSync(path.join(cwd, norm)))
259
- return norm;
260
- const parts = norm.split('/');
261
- for (let i = 1; i < parts.length; i++) {
262
- const candidate = parts.slice(i).join('/');
263
- if (fs.existsSync(path.join(cwd, candidate)))
264
- return candidate;
265
- }
266
- return norm;
267
- }
268
76
  //# sourceMappingURL=coverage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/analyzers/tools/coverage.ts"],"names":[],"mappings":"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"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/generic.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAsCzC,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA4KxE"}
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/generic.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAqDzC,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA4KxE"}
@@ -42,6 +42,7 @@ exports.gatherGenericMetrics = gatherGenericMetrics;
42
42
  const fs = __importStar(require("fs"));
43
43
  const runner_1 = require("./runner");
44
44
  const exclusions_1 = require("./exclusions");
45
+ const languages_1 = require("../../languages");
45
46
  // grepCount uses a narrow filter (node_modules, dist, __pycache__, .d.ts) to
46
47
  // preserve pre-refactor byte-equality. The broader EXCLUDED_DIRS list from
47
48
  // exclusions.ts is used for find-based counts. Widening this filter would
@@ -63,10 +64,26 @@ function grepCount(cwd, pattern, includes) {
63
64
  }
64
65
  // EXCLUDE moved inside gatherGenericMetrics() — must be computed per-cwd now
65
66
  // so it picks up project-specific .gitignore / .dxkit-ignore entries.
66
- const SOURCE_EXTS = '\\( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" ' +
67
- '-o -name "*.py" -o -name "*.go" -o -name "*.rs" -o -name "*.cs" \\)';
68
- const TEST_PATTERNS = '\\( -name "*.test.*" -o -name "*.spec.*" -o -name "*_test.go" ' +
69
- '-o -name "test_*.py" -o -name "*Tests.cs" -o -name "*_test.rs" \\)';
67
+ // Pack-driven find expressions (Phase 10i.0-LP.3). Replaces the
68
+ // pre-LP hardcoded extension/pattern lists with iteration over the
69
+ // language registry. Adding a 6th pack auto-extends both expressions.
70
+ //
71
+ // Behavior expansions vs pre-LP.3 (both more correct than before):
72
+ // - `.mjs`/`.cjs` now counted as source files (TypeScript pack
73
+ // declared them in `sourceExtensions`; the legacy hardcoded list
74
+ // missed them).
75
+ // - Rust integration tests under `tests/*.rs` now counted as test
76
+ // files (Rust pack declared `tests/*.rs` as a path-anchored
77
+ // pattern; the legacy used only `-name` and skipped path patterns).
78
+ const SOURCE_EXTS = `\\( ${(0, languages_1.allSourceExtensions)()
79
+ .map((e) => `-name "*${e}"`)
80
+ .join(' -o ')} \\)`;
81
+ const TEST_PATTERNS = (() => {
82
+ const { nameOnly, pathAnchored } = (0, languages_1.splitTestFilePatterns)();
83
+ const nameClauses = nameOnly.map((p) => `-name "${p}"`);
84
+ const pathClauses = pathAnchored.map((p) => `-path "*/${p}"`);
85
+ return `\\( ${[...nameClauses, ...pathClauses].join(' -o ')} \\)`;
86
+ })();
70
87
  /** Gather metrics using only built-in Unix tools. */
71
88
  function gatherGenericMetrics(cwd) {
72
89
  const EXCLUDE = (0, exclusions_1.getFindExcludeFlags)(cwd);
@@ -1 +1 @@
1
- {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/analyzers/tools/generic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/analyzers/tools/generic.ts"],"names":[],"mappings":"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"}
@@ -114,9 +114,9 @@ for n, d in functions:
114
114
 
115
115
  max_file = file_funcs.most_common(1)[0] if file_funcs else ("", 0)
116
116
 
117
- # God nodes (degree > 15)
117
+ # God nodes: graphifyy@0.5.0 renamed the result key "edges" → "degree".
118
118
  gods = god_nodes(G, top_n=50)
119
- god_count = sum(1 for g in gods if g["edges"] > 15)
119
+ god_count = sum(1 for g in gods if g["degree"] > 15)
120
120
 
121
121
  # Cohesion
122
122
  scores = score_all(G, communities) if communities else {}
@@ -1 +1 @@
1
- {"version":3,"file":"grep-secrets.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/grep-secrets.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,oCAAoC,CAAC;AA0BvF,4FAA4F;AAC5F,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAkDzE;AAED,eAAO,MAAM,mBAAmB,EAAE,kBAAkB,CAAC,aAAa,CAKjE,CAAC"}
1
+ {"version":3,"file":"grep-secrets.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/grep-secrets.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,oCAAoC,CAAC;AA0BvF,4FAA4F;AAC5F,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAyDzE;AAED,eAAO,MAAM,mBAAmB,EAAE,kBAAkB,CAAC,aAAa,CAKjE,CAAC"}
@@ -55,6 +55,7 @@ const tool_registry_1 = require("./tool-registry");
55
55
  const exclusions_1 = require("./exclusions");
56
56
  const paths_1 = require("./paths");
57
57
  const suppressions_1 = require("./suppressions");
58
+ const languages_1 = require("../../languages");
58
59
  /**
59
60
  * Seven patterns that catch the most common hardcoded-secret shapes.
60
61
  * Mirrors the set that lived in `generic.ts` pre-C.7, with identical
@@ -81,7 +82,15 @@ function gatherGrepSecretsResult(cwd) {
81
82
  if (gitleaks.available)
82
83
  return null;
83
84
  const excludes = (0, exclusions_1.getGrepExcludeDirFlags)(cwd);
84
- const includeFlags = "--include='*.ts' --include='*.tsx' --include='*.js' --include='*.py' --include='*.go'";
85
+ // Pack-driven include flags (Phase 10i.0-LP.3). Replaces the prior
86
+ // hardcoded `.ts/.tsx/.js/.py/.go` set with all packs'
87
+ // `sourceExtensions`. Behavior expansion: `.cs` and `.rs` files are
88
+ // now scanned for secrets when gitleaks is unavailable. The legacy
89
+ // hardcoded set was a subset oversight — gitleaks (the primary
90
+ // scanner) covers all file types, so the fallback should too.
91
+ const includeFlags = (0, languages_1.allSourceExtensions)()
92
+ .map((e) => `--include='*${e}'`)
93
+ .join(' ');
85
94
  const raw = [];
86
95
  for (const sp of PATTERNS) {
87
96
  // Single-quoted pattern + -E for extended regex. Per the feedback memory.
@@ -1 +1 @@
1
- {"version":3,"file":"grep-secrets.js","sourceRoot":"","sources":["../../../src/analyzers/tools/grep-secrets.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,0DAkDC;AAlGD;;;;;;;;;;;;;GAaG;AACH,2CAA6B;AAC7B,qCAA+B;AAC/B,mDAAsD;AACtD,6CAAsE;AACtE,mCAA4C;AAC5C,iDAAqE;AASrE;;;;GAIG;AACH,MAAM,QAAQ,GAAkB;IAC9B,EAAE,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,oBAAoB,EAAE;IACnE,EAAE,OAAO,EAAE,6BAA6B,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACrE,EAAE,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,kBAAkB,EAAE;IAC/D,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,uBAAuB,EAAE;IAChE,EAAE,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACvD,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,cAAc,EAAE;IACxD,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,mBAAmB,EAAE;CAC7D,CAAC;AAEF,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AACzF,CAAC;AAED,4FAA4F;AAC5F,SAAgB,uBAAuB,CAAC,GAAW;IACjD,qEAAqE;IACrE,0EAA0E;IAC1E,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,IAAA,wBAAQ,EAAC,yBAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnD,IAAI,QAAQ,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,QAAQ,GAAG,IAAA,mCAAsB,EAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,YAAY,GAChB,uFAAuF,CAAC;IAE1F,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,0EAA0E;QAC1E,MAAM,MAAM,GAAG,IAAA,YAAG,EAChB,cAAc,EAAE,CAAC,OAAO,KAAK,YAAY,IAAI,QAAQ,2BAA2B,EAChF,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC9D,8CAA8C;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,IAAI,GAAG,IAAA,yBAAiB,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,IAAA,2BAAc,EAAC,GAAG,EAAE,IAAI,CAAC;gBAAE,SAAS;YACxC,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI;gBACJ,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC5B,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,sDAAsD;IACtD,MAAM,YAAY,GAAG,IAAA,+BAAgB,EAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAA,gCAAiB,EAC5C,GAAG,EACH,YAAY,CAAC,QAAQ,EACrB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EACb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACd,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,UAAU,CAAC,MAAM;KACnC,CAAC;AACJ,CAAC;AAEY,QAAA,mBAAmB,GAAsC;IACpE,MAAM,EAAE,cAAc;IACtB,KAAK,CAAC,MAAM,CAAC,GAAG;QACd,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"grep-secrets.js","sourceRoot":"","sources":["../../../src/analyzers/tools/grep-secrets.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 fixed source-file pattern and respects the project's `.gitignore`
7
- * via the `--gitignore` flag — crucial on large repos, jscpd without
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 cross-language (all five packs' extensions
11
- * in one glob). jscpd's tokenizer is language-aware so this is safe;
12
- * keeping the pattern declared here rather than per-pack avoids five
13
- * separate jscpd invocations on mixed-stack repos.
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;;;;;;;;;;;;;GAaG;AAEH,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;AAgC5C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,wBAAwB,CAqCvE;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,kBAAkB,CAAC,iBAAiB,CAM/D,CAAC"}
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 fixed source-file pattern and respects the project's `.gitignore`
8
- * via the `--gitignore` flag — crucial on large repos, jscpd without
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 cross-language (all five packs' extensions
12
- * in one glob). jscpd's tokenizer is language-aware so this is safe;
13
- * keeping the pattern declared here rather than per-pack avoids five
14
- * separate jscpd invocations on mixed-stack repos.
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. A union pattern
23
- * rather than per-pack invocation so mixed-stack repos (Node + Python)
24
- * pay for one jscpd run, not N. Adding a language's extensions here is
25
- * the one cross-cutting edit needed when registering a new pack.
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
- const JSCPD_PATTERN = '**/*.{ts,tsx,js,jsx,py,go,rs,cs}';
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
- (0, runner_1.run)(`${status.path} --reporters json --output '${reportDir}' --gitignore --pattern '${JSCPD_PATTERN}' --min-lines 5 --min-tokens 50 '${cwd}' > /dev/null 2>&1`, cwd, 300000);
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":"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"}
1
+ {"version":3,"file":"jscpd.js","sourceRoot":"","sources":["../../../src/analyzers/tools/jscpd.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAoFH,8CAsCC;AAxHD,+CAA4C;AAG5C,qCAA+B;AAC/B,mDAAsD;AA8BtD;;;;;;;;;;;GAWG;AACH,SAAS,iBAAiB;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,qBAAS,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAChD,CAAC;AAED,0DAA0D;AAC1D,SAAS,aAAa,CAAC,UAA+B,EAAE,KAAK,GAAG,EAAE;IAChE,OAAO,UAAU;SACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC;SACjE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;QACnB,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC;QACrB,CAAC,EAAE;YACD,IAAI,EAAE,CAAC,CAAC,SAAU,CAAC,IAAK;YACxB,SAAS,EAAE,CAAC,CAAC,SAAU,CAAC,KAAK,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,CAAC,SAAU,CAAC,GAAG,IAAI,CAAC;SAC/B;QACD,CAAC,EAAE;YACD,IAAI,EAAE,CAAC,CAAC,UAAW,CAAC,IAAK;YACzB,SAAS,EAAE,CAAC,CAAC,UAAW,CAAC,KAAK,IAAI,CAAC;YACnC,OAAO,EAAE,CAAC,CAAC,UAAW,CAAC,GAAG,IAAI,CAAC;SAChC;KACF,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,yBAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAE/F,MAAM,SAAS,GAAG,oBAAoB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,IAAA,YAAG,EACD,GAAG,MAAM,CAAC,IAAI,+BAA+B,SAAS,4BAA4B,OAAO,oCAAoC,GAAG,oBAAoB,EACpJ,GAAG,EACH,MAAM,CACP,CAAC;IAEF,MAAM,SAAS,GAAG,IAAA,YAAG,EAAC,QAAQ,SAAS,iCAAiC,EAAE,GAAG,CAAC,CAAC;IAC/E,IAAA,YAAG,EAAC,WAAW,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC;IAElC,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAEpE,IAAI,IAAiB,CAAC;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAgB,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;IACjC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAEjE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAsB;QAClC,aAAa,EAAE,CAAC;QAChB,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,CAAC,CAAC,KAAK;QACnB,eAAe,EAAE,CAAC,CAAC,eAAe;QAClC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG;QAChD,UAAU,EAAE,UAAU,CAAC,MAAM;QAC7B,SAAS,EAAE,aAAa,CAAC,UAAU,CAAC;KACrC,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACU,QAAA,aAAa,GAA0C;IAClE,MAAM,EAAE,OAAO;IACf,KAAK,CAAC,MAAM,CAAC,GAAG;QACd,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/tool-registry.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,QAA2D,CAAC;AA2BnF,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,eAAe,EAAE;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,CAAC;IAClF,WAAW,EAAE,cAAc,CAAC;CAC7B;AAsHD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAiFtE;AAkBD,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAO7D;AAMD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAiYpD,CAAC;AAMF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,eAAe,EAAE,CA0C3F;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAgB/F"}
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/tool-registry.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,QAA2D,CAAC;AA2BnF,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,eAAe,EAAE;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,CAAC;IAClF,WAAW,EAAE,cAAc,CAAC;CAC7B;AAuHD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAiFtE;AAkBD,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAO7D;AAMD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA2ZpD,CAAC;AAMF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,eAAe,EAAE,CA8B3F;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAgB/F"}