@vyuhlabs/dxkit 1.5.1 → 1.6.0
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 +264 -0
- package/README.md +265 -352
- package/THIRD_PARTY_NOTICES.md +40 -0
- package/dist/analyzers/developer/detailed.d.ts +26 -0
- package/dist/analyzers/developer/detailed.d.ts.map +1 -0
- package/dist/analyzers/developer/detailed.js +193 -0
- package/dist/analyzers/developer/detailed.js.map +1 -0
- package/dist/analyzers/developer/gather.d.ts +11 -0
- package/dist/analyzers/developer/gather.d.ts.map +1 -0
- package/dist/analyzers/developer/gather.js +167 -0
- package/dist/analyzers/developer/gather.js.map +1 -0
- package/dist/analyzers/developer/index.d.ts +8 -0
- package/dist/analyzers/developer/index.d.ts.map +1 -0
- package/dist/analyzers/developer/index.js +168 -0
- package/dist/analyzers/developer/index.js.map +1 -0
- package/dist/analyzers/developer/types.d.ts +49 -0
- package/dist/analyzers/developer/types.d.ts.map +1 -0
- package/dist/analyzers/developer/types.js +6 -0
- package/dist/analyzers/developer/types.js.map +1 -0
- package/dist/analyzers/docs/shallow.d.ts +9 -0
- package/dist/analyzers/docs/shallow.d.ts.map +1 -0
- package/dist/analyzers/docs/shallow.js +8 -0
- package/dist/analyzers/docs/shallow.js.map +1 -0
- package/dist/analyzers/dx/shallow.d.ts +9 -0
- package/dist/analyzers/dx/shallow.d.ts.map +1 -0
- package/dist/analyzers/dx/shallow.js +8 -0
- package/dist/analyzers/dx/shallow.js.map +1 -0
- package/dist/analyzers/evidence.d.ts +36 -0
- package/dist/analyzers/evidence.d.ts.map +1 -0
- package/dist/analyzers/evidence.js +3 -0
- package/dist/analyzers/evidence.js.map +1 -0
- package/dist/analyzers/health/actions.d.ts +10 -0
- package/dist/analyzers/health/actions.d.ts.map +1 -0
- package/dist/analyzers/health/actions.js +284 -0
- package/dist/analyzers/health/actions.js.map +1 -0
- package/dist/analyzers/health/detailed.d.ts +26 -0
- package/dist/analyzers/health/detailed.d.ts.map +1 -0
- package/dist/analyzers/health/detailed.js +147 -0
- package/dist/analyzers/health/detailed.js.map +1 -0
- package/dist/analyzers/health.d.ts +22 -0
- package/dist/analyzers/health.d.ts.map +1 -0
- package/dist/analyzers/health.js +270 -0
- package/dist/analyzers/health.js.map +1 -0
- package/dist/analyzers/index.d.ts +3 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +6 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/maintainability/shallow.d.ts +9 -0
- package/dist/analyzers/maintainability/shallow.d.ts.map +1 -0
- package/dist/analyzers/maintainability/shallow.js +8 -0
- package/dist/analyzers/maintainability/shallow.js.map +1 -0
- package/dist/analyzers/quality/actions.d.ts +5 -0
- package/dist/analyzers/quality/actions.d.ts.map +1 -0
- package/dist/analyzers/quality/actions.js +158 -0
- package/dist/analyzers/quality/actions.js.map +1 -0
- package/dist/analyzers/quality/detailed.d.ts +17 -0
- package/dist/analyzers/quality/detailed.d.ts.map +1 -0
- package/dist/analyzers/quality/detailed.js +122 -0
- package/dist/analyzers/quality/detailed.js.map +1 -0
- package/dist/analyzers/quality/gather.d.ts +38 -0
- package/dist/analyzers/quality/gather.d.ts.map +1 -0
- package/dist/analyzers/quality/gather.js +279 -0
- package/dist/analyzers/quality/gather.js.map +1 -0
- package/dist/analyzers/quality/index.d.ts +12 -0
- package/dist/analyzers/quality/index.d.ts.map +1 -0
- package/dist/analyzers/quality/index.js +281 -0
- package/dist/analyzers/quality/index.js.map +1 -0
- package/dist/analyzers/quality/shallow.d.ts +9 -0
- package/dist/analyzers/quality/shallow.d.ts.map +1 -0
- package/dist/analyzers/quality/shallow.js +8 -0
- package/dist/analyzers/quality/shallow.js.map +1 -0
- package/dist/analyzers/quality/types.d.ts +66 -0
- package/dist/analyzers/quality/types.d.ts.map +1 -0
- package/dist/analyzers/quality/types.js +3 -0
- package/dist/analyzers/quality/types.js.map +1 -0
- package/dist/analyzers/remediation.d.ts +42 -0
- package/dist/analyzers/remediation.d.ts.map +1 -0
- package/dist/analyzers/remediation.js +28 -0
- package/dist/analyzers/remediation.js.map +1 -0
- package/dist/analyzers/scoring.d.ts +32 -0
- package/dist/analyzers/scoring.d.ts.map +1 -0
- package/dist/analyzers/scoring.js +410 -0
- package/dist/analyzers/scoring.js.map +1 -0
- package/dist/analyzers/security/actions.d.ts +7 -0
- package/dist/analyzers/security/actions.d.ts.map +1 -0
- package/dist/analyzers/security/actions.js +104 -0
- package/dist/analyzers/security/actions.js.map +1 -0
- package/dist/analyzers/security/detailed.d.ts +14 -0
- package/dist/analyzers/security/detailed.d.ts.map +1 -0
- package/dist/analyzers/security/detailed.js +124 -0
- package/dist/analyzers/security/detailed.js.map +1 -0
- package/dist/analyzers/security/gather.d.ts +12 -0
- package/dist/analyzers/security/gather.d.ts.map +1 -0
- package/dist/analyzers/security/gather.js +195 -0
- package/dist/analyzers/security/gather.js.map +1 -0
- package/dist/analyzers/security/index.d.ts +8 -0
- package/dist/analyzers/security/index.d.ts.map +1 -0
- package/dist/analyzers/security/index.js +173 -0
- package/dist/analyzers/security/index.js.map +1 -0
- package/dist/analyzers/security/scoring.d.ts +29 -0
- package/dist/analyzers/security/scoring.d.ts.map +1 -0
- package/dist/analyzers/security/scoring.js +40 -0
- package/dist/analyzers/security/scoring.js.map +1 -0
- package/dist/analyzers/security/shallow.d.ts +10 -0
- package/dist/analyzers/security/shallow.d.ts.map +1 -0
- package/dist/analyzers/security/shallow.js +8 -0
- package/dist/analyzers/security/shallow.js.map +1 -0
- package/dist/analyzers/security/types.d.ts +43 -0
- package/dist/analyzers/security/types.d.ts.map +1 -0
- package/dist/analyzers/security/types.js +6 -0
- package/dist/analyzers/security/types.js.map +1 -0
- package/dist/analyzers/tests/actions.d.ts +6 -0
- package/dist/analyzers/tests/actions.d.ts.map +1 -0
- package/dist/analyzers/tests/actions.js +80 -0
- package/dist/analyzers/tests/actions.js.map +1 -0
- package/dist/analyzers/tests/detailed.d.ts +14 -0
- package/dist/analyzers/tests/detailed.d.ts.map +1 -0
- package/dist/analyzers/tests/detailed.js +121 -0
- package/dist/analyzers/tests/detailed.js.map +1 -0
- package/dist/analyzers/tests/gather.d.ts +5 -0
- package/dist/analyzers/tests/gather.d.ts.map +1 -0
- package/dist/analyzers/tests/gather.js +270 -0
- package/dist/analyzers/tests/gather.js.map +1 -0
- package/dist/analyzers/tests/import-graph.d.ts +48 -0
- package/dist/analyzers/tests/import-graph.d.ts.map +1 -0
- package/dist/analyzers/tests/import-graph.js +231 -0
- package/dist/analyzers/tests/import-graph.js.map +1 -0
- package/dist/analyzers/tests/index.d.ts +8 -0
- package/dist/analyzers/tests/index.d.ts.map +1 -0
- package/dist/analyzers/tests/index.js +247 -0
- package/dist/analyzers/tests/index.js.map +1 -0
- package/dist/analyzers/tests/scoring.d.ts +27 -0
- package/dist/analyzers/tests/scoring.d.ts.map +1 -0
- package/dist/analyzers/tests/scoring.js +38 -0
- package/dist/analyzers/tests/scoring.js.map +1 -0
- package/dist/analyzers/tests/shallow.d.ts +9 -0
- package/dist/analyzers/tests/shallow.d.ts.map +1 -0
- package/dist/analyzers/tests/shallow.js +8 -0
- package/dist/analyzers/tests/shallow.js.map +1 -0
- package/dist/analyzers/tests/types.d.ts +49 -0
- package/dist/analyzers/tests/types.d.ts.map +1 -0
- package/dist/analyzers/tests/types.js +6 -0
- package/dist/analyzers/tests/types.js.map +1 -0
- package/dist/analyzers/tools/cloc.d.ts +8 -0
- package/dist/analyzers/tools/cloc.d.ts.map +1 -0
- package/dist/analyzers/tools/cloc.js +49 -0
- package/dist/analyzers/tools/cloc.js.map +1 -0
- package/dist/analyzers/tools/coverage.d.ts +59 -0
- package/dist/analyzers/tools/coverage.d.ts.map +1 -0
- package/dist/analyzers/tools/coverage.js +280 -0
- package/dist/analyzers/tools/coverage.js.map +1 -0
- package/dist/analyzers/tools/cvss-v4-lookup.d.ts +10 -0
- package/dist/analyzers/tools/cvss-v4-lookup.d.ts.map +1 -0
- package/dist/analyzers/tools/cvss-v4-lookup.js +284 -0
- package/dist/analyzers/tools/cvss-v4-lookup.js.map +1 -0
- package/dist/analyzers/tools/cvss-v4.d.ts +24 -0
- package/dist/analyzers/tools/cvss-v4.d.ts.map +1 -0
- package/dist/analyzers/tools/cvss-v4.js +362 -0
- package/dist/analyzers/tools/cvss-v4.js.map +1 -0
- package/dist/analyzers/tools/default-exclusions.gitignore +56 -0
- package/dist/analyzers/tools/exclusions.d.ts +70 -0
- package/dist/analyzers/tools/exclusions.d.ts.map +1 -0
- package/dist/analyzers/tools/exclusions.js +250 -0
- package/dist/analyzers/tools/exclusions.js.map +1 -0
- package/dist/analyzers/tools/generic.d.ts +4 -0
- package/dist/analyzers/tools/generic.d.ts.map +1 -0
- package/dist/analyzers/tools/generic.js +198 -0
- package/dist/analyzers/tools/generic.js.map +1 -0
- package/dist/analyzers/tools/gitleaks.d.ts +8 -0
- package/dist/analyzers/tools/gitleaks.d.ts.map +1 -0
- package/dist/analyzers/tools/gitleaks.js +58 -0
- package/dist/analyzers/tools/gitleaks.js.map +1 -0
- package/dist/analyzers/tools/graphify.d.ts +4 -0
- package/dist/analyzers/tools/graphify.d.ts.map +1 -0
- package/dist/analyzers/tools/graphify.js +222 -0
- package/dist/analyzers/tools/graphify.js.map +1 -0
- package/dist/analyzers/tools/osv.d.ts +51 -0
- package/dist/analyzers/tools/osv.d.ts.map +1 -0
- package/dist/analyzers/tools/osv.js +188 -0
- package/dist/analyzers/tools/osv.js.map +1 -0
- package/dist/analyzers/tools/parallel.d.ts +8 -0
- package/dist/analyzers/tools/parallel.d.ts.map +1 -0
- package/dist/analyzers/tools/parallel.js +195 -0
- package/dist/analyzers/tools/parallel.js.map +1 -0
- package/dist/analyzers/tools/runner.d.ts +13 -0
- package/dist/analyzers/tools/runner.d.ts.map +1 -0
- package/dist/analyzers/tools/runner.js +109 -0
- package/dist/analyzers/tools/runner.js.map +1 -0
- package/dist/analyzers/tools/suppressions.d.ts +55 -0
- package/dist/analyzers/tools/suppressions.d.ts.map +1 -0
- package/dist/analyzers/tools/suppressions.js +203 -0
- package/dist/analyzers/tools/suppressions.js.map +1 -0
- package/dist/analyzers/tools/timing.d.ts +9 -0
- package/dist/analyzers/tools/timing.d.ts.map +1 -0
- package/dist/analyzers/tools/timing.js +29 -0
- package/dist/analyzers/tools/timing.js.map +1 -0
- package/dist/analyzers/tools/tool-registry.d.ts +86 -0
- package/dist/analyzers/tools/tool-registry.d.ts.map +1 -0
- package/dist/analyzers/tools/tool-registry.js +705 -0
- package/dist/analyzers/tools/tool-registry.js.map +1 -0
- package/dist/analyzers/types.d.ts +125 -0
- package/dist/analyzers/types.d.ts.map +1 -0
- package/dist/analyzers/types.js +11 -0
- package/dist/analyzers/types.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +405 -0
- package/dist/cli.js.map +1 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +24 -15
- package/dist/detect.js.map +1 -1
- package/dist/languages/csharp.d.ts +5 -0
- package/dist/languages/csharp.d.ts.map +1 -0
- package/dist/languages/csharp.js +265 -0
- package/dist/languages/csharp.js.map +1 -0
- package/dist/languages/go.d.ts +11 -0
- package/dist/languages/go.d.ts.map +1 -0
- package/dist/languages/go.js +321 -0
- package/dist/languages/go.js.map +1 -0
- package/dist/languages/index.d.ts +6 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +18 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/python.d.ts +3 -0
- package/dist/languages/python.d.ts.map +1 -0
- package/dist/languages/python.js +284 -0
- package/dist/languages/python.js.map +1 -0
- package/dist/languages/rust.d.ts +17 -0
- package/dist/languages/rust.d.ts.map +1 -0
- package/dist/languages/rust.js +333 -0
- package/dist/languages/rust.js.map +1 -0
- package/dist/languages/types.d.ts +38 -0
- package/dist/languages/types.d.ts.map +1 -0
- package/dist/languages/types.js +3 -0
- package/dist/languages/types.js.map +1 -0
- package/dist/languages/typescript.d.ts +15 -0
- package/dist/languages/typescript.d.ts.map +1 -0
- package/dist/languages/typescript.js +353 -0
- package/dist/languages/typescript.js.map +1 -0
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +25 -12
- package/dist/logger.js.map +1 -1
- package/dist/project-yaml.d.ts.map +1 -1
- package/dist/project-yaml.js +1 -0
- package/dist/project-yaml.js.map +1 -1
- package/dist/tools-cli.d.ts +2 -0
- package/dist/tools-cli.d.ts.map +1 -0
- package/dist/tools-cli.js +231 -0
- package/dist/tools-cli.js.map +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -2
- package/templates/.claude/commands/dev-report.md +34 -4
- package/templates/.claude/commands/health.md +45 -2
- package/templates/.claude/commands/quality.md.template +38 -15
- package/templates/.claude/commands/test-gaps.md +36 -2
- package/templates/.claude/commands/vulnerabilities.md +36 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cvss-v4.js","sourceRoot":"","sources":["../../../src/analyzers/tools/cvss-v4.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Default exclusions for dxkit analyzers — gitignore format.
|
|
2
|
+
# Shipped with dxkit; always applied. Union'd with the project's .gitignore
|
|
3
|
+
# and optional .dxkit-ignore.
|
|
4
|
+
#
|
|
5
|
+
# Edit this file (or add entries to a project-local .dxkit-ignore) to tune
|
|
6
|
+
# what gets scanned. Rules:
|
|
7
|
+
# - Blank lines and `#` comments are ignored.
|
|
8
|
+
# - `foo/` → directory (matches any `foo` dir anywhere in the tree)
|
|
9
|
+
# - `foo/bar/` → multi-segment path (matches the nested path exactly)
|
|
10
|
+
# - `*.log` → file-glob pattern
|
|
11
|
+
# - Lines starting with `!` (negations) are not currently supported.
|
|
12
|
+
|
|
13
|
+
# ─── Package managers & build artifacts ───────────────────────────────────
|
|
14
|
+
node_modules/
|
|
15
|
+
dist/
|
|
16
|
+
build/
|
|
17
|
+
vendor/
|
|
18
|
+
target/
|
|
19
|
+
bin/
|
|
20
|
+
obj/
|
|
21
|
+
|
|
22
|
+
# ─── VCS & caches ─────────────────────────────────────────────────────────
|
|
23
|
+
.git/
|
|
24
|
+
.cache/
|
|
25
|
+
.next/
|
|
26
|
+
.nuxt/
|
|
27
|
+
.mypy_cache/
|
|
28
|
+
.pytest_cache/
|
|
29
|
+
.ruff_cache/
|
|
30
|
+
.tox/
|
|
31
|
+
coverage/
|
|
32
|
+
|
|
33
|
+
# ─── Python environments & bytecode ───────────────────────────────────────
|
|
34
|
+
__pycache__/
|
|
35
|
+
.venv/
|
|
36
|
+
venv/
|
|
37
|
+
|
|
38
|
+
# ─── Scaffold / starter / template dirs ───────────────────────────────────
|
|
39
|
+
# These contain code copied into user projects (not host project source).
|
|
40
|
+
templates/
|
|
41
|
+
src-templates/
|
|
42
|
+
scaffold/
|
|
43
|
+
scaffolds/
|
|
44
|
+
|
|
45
|
+
# ─── Vendored front-end asset bundles ────────────────────────────────────
|
|
46
|
+
public/assets/
|
|
47
|
+
static/js/
|
|
48
|
+
public/static/
|
|
49
|
+
|
|
50
|
+
# ─── Minified / generated files ───────────────────────────────────────────
|
|
51
|
+
*.min.js
|
|
52
|
+
*.min.css
|
|
53
|
+
*.bundle.js
|
|
54
|
+
*.chunk.js
|
|
55
|
+
*.generated.ts
|
|
56
|
+
*.d.ts
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized exclusions — data-driven from `.gitignore`-style files.
|
|
3
|
+
*
|
|
4
|
+
* Three layers, unioned:
|
|
5
|
+
* 1. Bundled `default-exclusions.gitignore` — ships with dxkit, always applied.
|
|
6
|
+
* 2. Project `.gitignore` — whatever the repo already ignores.
|
|
7
|
+
* 3. Project `.dxkit-ignore` (optional) — dxkit-specific extras.
|
|
8
|
+
*
|
|
9
|
+
* All three use the same parser so they behave identically. Users add/remove
|
|
10
|
+
* exclusions by editing a plain text file — no code changes needed.
|
|
11
|
+
*
|
|
12
|
+
* The canonical question "should this path be excluded?" is answered by
|
|
13
|
+
* `isExcludedPath()`. Tool-specific flag builders (grep, cloc, semgrep, find,
|
|
14
|
+
* graphify's Python) derive their flags from the same resolved exclusion set,
|
|
15
|
+
* so drift between tools is impossible.
|
|
16
|
+
*/
|
|
17
|
+
/** Resolved exclusions for one project root. */
|
|
18
|
+
export interface Exclusions {
|
|
19
|
+
/** Directory basenames — single-segment (no slash). Grep/find --exclude-dir friendly. */
|
|
20
|
+
dirs: string[];
|
|
21
|
+
/** Multi-segment path patterns. Need path-based matching. */
|
|
22
|
+
sourcePaths: string[];
|
|
23
|
+
/** File-glob patterns (e.g. *.min.js, *.d.ts, .DS_Store). */
|
|
24
|
+
filePatterns: string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Load resolved exclusions for a project root.
|
|
28
|
+
*
|
|
29
|
+
* Reads bundled defaults + project .gitignore + project .dxkit-ignore and
|
|
30
|
+
* returns the union. Result is memoized per cwd for the process lifetime.
|
|
31
|
+
*/
|
|
32
|
+
export declare function loadExclusions(cwd: string): Exclusions;
|
|
33
|
+
/** Clear memo — useful for tests. */
|
|
34
|
+
export declare function clearExclusionsCache(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Test whether a relative file path should be excluded from analysis.
|
|
37
|
+
*
|
|
38
|
+
* This is the ONE place every tool-wrapper consults. If a caller is tempted
|
|
39
|
+
* to inline `node_modules` / `dist` / `.min.` checks, they should call this
|
|
40
|
+
* instead. Keeps all tools behaving identically.
|
|
41
|
+
*
|
|
42
|
+
* Path must be relative (strip the cwd prefix before calling).
|
|
43
|
+
*/
|
|
44
|
+
export declare function isExcludedPath(cwd: string, relPath: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Build `find -not -path` flags excluding directories.
|
|
47
|
+
* Usage: `find . -type f ... ${getFindExcludeFlags(cwd)}`
|
|
48
|
+
*/
|
|
49
|
+
export declare function getFindExcludeFlags(cwd: string, includeSourcePaths?: boolean): string;
|
|
50
|
+
/**
|
|
51
|
+
* Build grep `--exclude-dir` flags (basename matching only).
|
|
52
|
+
* Path-based exclusions must be post-filtered via isExcludedPath().
|
|
53
|
+
*/
|
|
54
|
+
export declare function getGrepExcludeDirFlags(cwd: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* Build cloc `--exclude-dir` argument value (comma-separated basenames).
|
|
57
|
+
* cloc matches basenames only, so multi-segment sourcePaths get flattened.
|
|
58
|
+
*/
|
|
59
|
+
export declare function getClocExcludeDirs(cwd: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Build semgrep `--exclude` flags (one per directory/pattern).
|
|
62
|
+
* Usage: `semgrep scan ${getSemgrepExcludeFlags(cwd)} .`
|
|
63
|
+
*/
|
|
64
|
+
export declare function getSemgrepExcludeFlags(cwd: string): string;
|
|
65
|
+
/**
|
|
66
|
+
* Python set literal for graphify script — basenames only (flattened paths).
|
|
67
|
+
* Used as a template substitution in the embedded Python script.
|
|
68
|
+
*/
|
|
69
|
+
export declare function getPythonExcludeSet(cwd: string): string;
|
|
70
|
+
//# sourceMappingURL=exclusions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exclusions.d.ts","sourceRoot":"","sources":["../../../src/analyzers/tools/exclusions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,yFAAyF;IACzF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,6DAA6D;IAC7D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAQD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAmBtD;AAED,qCAAqC;AACrC,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAmED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAapE;AAqBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,UAAO,GAAG,MAAM,CAIlF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAavD"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Centralized exclusions — data-driven from `.gitignore`-style files.
|
|
4
|
+
*
|
|
5
|
+
* Three layers, unioned:
|
|
6
|
+
* 1. Bundled `default-exclusions.gitignore` — ships with dxkit, always applied.
|
|
7
|
+
* 2. Project `.gitignore` — whatever the repo already ignores.
|
|
8
|
+
* 3. Project `.dxkit-ignore` (optional) — dxkit-specific extras.
|
|
9
|
+
*
|
|
10
|
+
* All three use the same parser so they behave identically. Users add/remove
|
|
11
|
+
* exclusions by editing a plain text file — no code changes needed.
|
|
12
|
+
*
|
|
13
|
+
* The canonical question "should this path be excluded?" is answered by
|
|
14
|
+
* `isExcludedPath()`. Tool-specific flag builders (grep, cloc, semgrep, find,
|
|
15
|
+
* graphify's Python) derive their flags from the same resolved exclusion set,
|
|
16
|
+
* so drift between tools is impossible.
|
|
17
|
+
*/
|
|
18
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
21
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
22
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
23
|
+
}
|
|
24
|
+
Object.defineProperty(o, k2, desc);
|
|
25
|
+
}) : (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
o[k2] = m[k];
|
|
28
|
+
}));
|
|
29
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
30
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
31
|
+
}) : function(o, v) {
|
|
32
|
+
o["default"] = v;
|
|
33
|
+
});
|
|
34
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
35
|
+
var ownKeys = function(o) {
|
|
36
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
37
|
+
var ar = [];
|
|
38
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
39
|
+
return ar;
|
|
40
|
+
};
|
|
41
|
+
return ownKeys(o);
|
|
42
|
+
};
|
|
43
|
+
return function (mod) {
|
|
44
|
+
if (mod && mod.__esModule) return mod;
|
|
45
|
+
var result = {};
|
|
46
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
47
|
+
__setModuleDefault(result, mod);
|
|
48
|
+
return result;
|
|
49
|
+
};
|
|
50
|
+
})();
|
|
51
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
+
exports.loadExclusions = loadExclusions;
|
|
53
|
+
exports.clearExclusionsCache = clearExclusionsCache;
|
|
54
|
+
exports.isExcludedPath = isExcludedPath;
|
|
55
|
+
exports.getFindExcludeFlags = getFindExcludeFlags;
|
|
56
|
+
exports.getGrepExcludeDirFlags = getGrepExcludeDirFlags;
|
|
57
|
+
exports.getClocExcludeDirs = getClocExcludeDirs;
|
|
58
|
+
exports.getSemgrepExcludeFlags = getSemgrepExcludeFlags;
|
|
59
|
+
exports.getPythonExcludeSet = getPythonExcludeSet;
|
|
60
|
+
const fs = __importStar(require("fs"));
|
|
61
|
+
const path = __importStar(require("path"));
|
|
62
|
+
/** Memo: one entry per cwd so repeated helper calls don't re-read files. */
|
|
63
|
+
const cache = new Map();
|
|
64
|
+
/** Absolute path to the bundled default exclusions file. */
|
|
65
|
+
const DEFAULTS_PATH = path.join(__dirname, 'default-exclusions.gitignore');
|
|
66
|
+
/**
|
|
67
|
+
* Load resolved exclusions for a project root.
|
|
68
|
+
*
|
|
69
|
+
* Reads bundled defaults + project .gitignore + project .dxkit-ignore and
|
|
70
|
+
* returns the union. Result is memoized per cwd for the process lifetime.
|
|
71
|
+
*/
|
|
72
|
+
function loadExclusions(cwd) {
|
|
73
|
+
const hit = cache.get(cwd);
|
|
74
|
+
if (hit)
|
|
75
|
+
return hit;
|
|
76
|
+
const dirs = new Set();
|
|
77
|
+
const sourcePaths = new Set();
|
|
78
|
+
const filePatterns = new Set();
|
|
79
|
+
parseGitignoreFile(DEFAULTS_PATH, dirs, sourcePaths, filePatterns);
|
|
80
|
+
parseGitignoreFile(path.join(cwd, '.gitignore'), dirs, sourcePaths, filePatterns);
|
|
81
|
+
parseGitignoreFile(path.join(cwd, '.dxkit-ignore'), dirs, sourcePaths, filePatterns);
|
|
82
|
+
const resolved = {
|
|
83
|
+
dirs: [...dirs],
|
|
84
|
+
sourcePaths: [...sourcePaths],
|
|
85
|
+
filePatterns: [...filePatterns],
|
|
86
|
+
};
|
|
87
|
+
cache.set(cwd, resolved);
|
|
88
|
+
return resolved;
|
|
89
|
+
}
|
|
90
|
+
/** Clear memo — useful for tests. */
|
|
91
|
+
function clearExclusionsCache() {
|
|
92
|
+
cache.clear();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Parse a .gitignore-style file, classifying each entry into dirs / sourcePaths
|
|
96
|
+
* / filePatterns. Best-effort mapping of gitignore semantics:
|
|
97
|
+
*
|
|
98
|
+
* `foo/` directory basename → dirs
|
|
99
|
+
* `foo/bar/` multi-segment path → sourcePaths
|
|
100
|
+
* `*.log` glob (contains `*`) → filePatterns
|
|
101
|
+
* `.DS_Store` specific file (has `.`) → filePatterns
|
|
102
|
+
* `.env` specific file → filePatterns
|
|
103
|
+
* `foo` bare name, no `.` no slash → dirs
|
|
104
|
+
*
|
|
105
|
+
* Lines starting with `#` or `!`, and blank lines, are skipped. Leading `/`
|
|
106
|
+
* is stripped (we treat all patterns as "anywhere in tree" — the same way
|
|
107
|
+
* gitignore treats leading-slash patterns relative to the repo root).
|
|
108
|
+
*/
|
|
109
|
+
function parseGitignoreFile(filePath, dirs, sourcePaths, filePatterns) {
|
|
110
|
+
let content;
|
|
111
|
+
try {
|
|
112
|
+
content = fs.readFileSync(filePath, 'utf-8');
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
for (const rawLine of content.split('\n')) {
|
|
118
|
+
const line = rawLine.replace(/\s+#.*$/, '').trim();
|
|
119
|
+
if (!line || line.startsWith('#') || line.startsWith('!'))
|
|
120
|
+
continue;
|
|
121
|
+
const noSlash = line.replace(/^\//, '');
|
|
122
|
+
const isDir = noSlash.endsWith('/');
|
|
123
|
+
const core = isDir ? noSlash.slice(0, -1) : noSlash;
|
|
124
|
+
if (!core)
|
|
125
|
+
continue;
|
|
126
|
+
// Glob patterns (*, ?) are always file patterns.
|
|
127
|
+
if (core.includes('*') || core.includes('?')) {
|
|
128
|
+
filePatterns.add(core);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
// Multi-segment: directory path OR nested file.
|
|
132
|
+
if (core.includes('/')) {
|
|
133
|
+
sourcePaths.add(core);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
// Single segment: `foo/` → dir, `foo.txt` (has extension) → file,
|
|
137
|
+
// `.env` (dotfile without extension) → file, `foo` (bare name) → dir.
|
|
138
|
+
if (isDir) {
|
|
139
|
+
dirs.add(core);
|
|
140
|
+
}
|
|
141
|
+
else if (/^\.[^.]+$/.test(core) || core.includes('.')) {
|
|
142
|
+
// Dotfiles (.env, .DS_Store) and files with extensions (foo.log).
|
|
143
|
+
filePatterns.add(core);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
dirs.add(core);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// ─── Path predicate (centralized) ──────────────────────────────────────────
|
|
151
|
+
/**
|
|
152
|
+
* Test whether a relative file path should be excluded from analysis.
|
|
153
|
+
*
|
|
154
|
+
* This is the ONE place every tool-wrapper consults. If a caller is tempted
|
|
155
|
+
* to inline `node_modules` / `dist` / `.min.` checks, they should call this
|
|
156
|
+
* instead. Keeps all tools behaving identically.
|
|
157
|
+
*
|
|
158
|
+
* Path must be relative (strip the cwd prefix before calling).
|
|
159
|
+
*/
|
|
160
|
+
function isExcludedPath(cwd, relPath) {
|
|
161
|
+
if (!relPath)
|
|
162
|
+
return false;
|
|
163
|
+
const { dirs, sourcePaths, filePatterns } = loadExclusions(cwd);
|
|
164
|
+
const segs = relPath.split('/').filter(Boolean);
|
|
165
|
+
if (dirs.some((d) => segs.includes(d)))
|
|
166
|
+
return true;
|
|
167
|
+
if (sourcePaths.some((p) => relPath.includes(p)))
|
|
168
|
+
return true;
|
|
169
|
+
const base = segs[segs.length - 1] || '';
|
|
170
|
+
for (const pat of filePatterns) {
|
|
171
|
+
if (matchFileGlob(pat, base))
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
/** Match a basename against a simple glob (* and ?). */
|
|
177
|
+
function matchFileGlob(pattern, base) {
|
|
178
|
+
// If pattern has no wildcards, require exact basename match.
|
|
179
|
+
if (!pattern.includes('*') && !pattern.includes('?')) {
|
|
180
|
+
return base === pattern;
|
|
181
|
+
}
|
|
182
|
+
const regex = new RegExp('^' +
|
|
183
|
+
pattern
|
|
184
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
185
|
+
.replace(/\*/g, '.*')
|
|
186
|
+
.replace(/\?/g, '.') +
|
|
187
|
+
'$');
|
|
188
|
+
return regex.test(base);
|
|
189
|
+
}
|
|
190
|
+
// ─── Tool-specific flag builders ────────────────────────────────────────────
|
|
191
|
+
/**
|
|
192
|
+
* Build `find -not -path` flags excluding directories.
|
|
193
|
+
* Usage: `find . -type f ... ${getFindExcludeFlags(cwd)}`
|
|
194
|
+
*/
|
|
195
|
+
function getFindExcludeFlags(cwd, includeSourcePaths = true) {
|
|
196
|
+
const { dirs, sourcePaths } = loadExclusions(cwd);
|
|
197
|
+
const all = includeSourcePaths ? [...dirs, ...sourcePaths] : dirs;
|
|
198
|
+
return all.map((d) => `-not -path "*/${d}/*"`).join(' ');
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Build grep `--exclude-dir` flags (basename matching only).
|
|
202
|
+
* Path-based exclusions must be post-filtered via isExcludedPath().
|
|
203
|
+
*/
|
|
204
|
+
function getGrepExcludeDirFlags(cwd) {
|
|
205
|
+
const { dirs } = loadExclusions(cwd);
|
|
206
|
+
return dirs.map((d) => `--exclude-dir='${d}'`).join(' ');
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Build cloc `--exclude-dir` argument value (comma-separated basenames).
|
|
210
|
+
* cloc matches basenames only, so multi-segment sourcePaths get flattened.
|
|
211
|
+
*/
|
|
212
|
+
function getClocExcludeDirs(cwd) {
|
|
213
|
+
const { dirs, sourcePaths } = loadExclusions(cwd);
|
|
214
|
+
const basenames = new Set(dirs);
|
|
215
|
+
for (const p of sourcePaths) {
|
|
216
|
+
for (const seg of p.split('/'))
|
|
217
|
+
if (seg)
|
|
218
|
+
basenames.add(seg);
|
|
219
|
+
}
|
|
220
|
+
return Array.from(basenames).join(',');
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Build semgrep `--exclude` flags (one per directory/pattern).
|
|
224
|
+
* Usage: `semgrep scan ${getSemgrepExcludeFlags(cwd)} .`
|
|
225
|
+
*/
|
|
226
|
+
function getSemgrepExcludeFlags(cwd) {
|
|
227
|
+
const { dirs, sourcePaths, filePatterns } = loadExclusions(cwd);
|
|
228
|
+
const dirFlags = [...dirs, ...sourcePaths].map((d) => `--exclude '${d}'`).join(' ');
|
|
229
|
+
const fileFlags = filePatterns.map((p) => `--exclude '${p}'`).join(' ');
|
|
230
|
+
return `${dirFlags} ${fileFlags}`;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Python set literal for graphify script — basenames only (flattened paths).
|
|
234
|
+
* Used as a template substitution in the embedded Python script.
|
|
235
|
+
*/
|
|
236
|
+
function getPythonExcludeSet(cwd) {
|
|
237
|
+
const { dirs, sourcePaths } = loadExclusions(cwd);
|
|
238
|
+
const basenames = new Set(dirs);
|
|
239
|
+
for (const p of sourcePaths) {
|
|
240
|
+
for (const seg of p.split('/'))
|
|
241
|
+
if (seg)
|
|
242
|
+
basenames.add(seg);
|
|
243
|
+
}
|
|
244
|
+
return ('{' +
|
|
245
|
+
Array.from(basenames)
|
|
246
|
+
.map((d) => `'${d}'`)
|
|
247
|
+
.join(', ') +
|
|
248
|
+
'}');
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=exclusions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exclusions.js","sourceRoot":"","sources":["../../../src/analyzers/tools/exclusions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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,CAwMxE"}
|
|
@@ -0,0 +1,198 @@
|
|
|
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.gatherGenericMetrics = gatherGenericMetrics;
|
|
37
|
+
/**
|
|
38
|
+
* Generic tool runner -- uses grep, find, wc, git.
|
|
39
|
+
* Works on any Unix machine with no external dependencies.
|
|
40
|
+
* This is Layer 0: always available.
|
|
41
|
+
*/
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const runner_1 = require("./runner");
|
|
44
|
+
const exclusions_1 = require("./exclusions");
|
|
45
|
+
// grepCount uses a narrow filter (node_modules, dist, __pycache__, .d.ts) to
|
|
46
|
+
// preserve pre-refactor byte-equality. The broader EXCLUDED_DIRS list from
|
|
47
|
+
// exclusions.ts is used for find-based counts. Widening this filter would
|
|
48
|
+
// change legitimate metric totals and should be a separate, intentional change.
|
|
49
|
+
const GREP_PIPELINE_FILTER = 'grep -v node_modules | grep -v dist | grep -v __pycache__';
|
|
50
|
+
/** Reliable grep count that avoids shell escaping issues by writing pattern to a temp file. */
|
|
51
|
+
function grepCount(cwd, pattern, includes) {
|
|
52
|
+
const patternFile = `/tmp/dxkit-grep-${Date.now()}-${Math.random().toString(36).slice(2)}.pat`;
|
|
53
|
+
fs.writeFileSync(patternFile, pattern);
|
|
54
|
+
const includeFlags = includes.map((i) => `--include='${i}'`).join(' ');
|
|
55
|
+
const result = (0, runner_1.run)(`grep -rEf '${patternFile}' ${includeFlags} . 2>/dev/null | ${GREP_PIPELINE_FILTER} | grep -v '.d.ts' | wc -l`, cwd);
|
|
56
|
+
try {
|
|
57
|
+
fs.unlinkSync(patternFile);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
/* ignore */
|
|
61
|
+
}
|
|
62
|
+
return parseInt(result) || 0;
|
|
63
|
+
}
|
|
64
|
+
// EXCLUDE moved inside gatherGenericMetrics() — must be computed per-cwd now
|
|
65
|
+
// 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" \\)';
|
|
70
|
+
/** Gather metrics using only built-in Unix tools. */
|
|
71
|
+
function gatherGenericMetrics(cwd) {
|
|
72
|
+
const EXCLUDE = (0, exclusions_1.getFindExcludeFlags)(cwd);
|
|
73
|
+
// File counts
|
|
74
|
+
const sourceFiles = (0, runner_1.countLines)(`find . -type f ${SOURCE_EXTS} ${EXCLUDE}`, cwd);
|
|
75
|
+
const testFiles = (0, runner_1.countLines)(`find . -type f ${TEST_PATTERNS} ${EXCLUDE}`, cwd);
|
|
76
|
+
const testDirFiles = (0, runner_1.countLines)(`find . -type f ${SOURCE_EXTS} ${EXCLUDE} \\( -path "*/__tests__/*" -o -path "*/tests/*" -o -path "*/test/*" \\) 2>/dev/null`, cwd);
|
|
77
|
+
// Total lines, largest file, files over 500 — single find+xargs wc pass
|
|
78
|
+
const wcRaw = (0, runner_1.run)(`find . -type f ${SOURCE_EXTS} ${EXCLUDE} -print0 2>/dev/null | xargs -0 wc -l 2>/dev/null`, cwd, 120000);
|
|
79
|
+
let totalLines = 0;
|
|
80
|
+
let largestFileLines = 0;
|
|
81
|
+
let largestFilePath = '';
|
|
82
|
+
let filesOver500Lines = 0;
|
|
83
|
+
if (wcRaw) {
|
|
84
|
+
for (const line of wcRaw.split('\n')) {
|
|
85
|
+
const m = line.trim().match(/^(\d+)\s+(.+)$/);
|
|
86
|
+
if (!m)
|
|
87
|
+
continue;
|
|
88
|
+
const lines = parseInt(m[1]);
|
|
89
|
+
const file = m[2];
|
|
90
|
+
if (file === 'total') {
|
|
91
|
+
totalLines = lines;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
if (lines > largestFileLines) {
|
|
95
|
+
largestFileLines = lines;
|
|
96
|
+
largestFilePath = file;
|
|
97
|
+
}
|
|
98
|
+
if (lines > 500)
|
|
99
|
+
filesOver500Lines++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// If only one file, xargs wc won't print "total"
|
|
103
|
+
if (totalLines === 0 && largestFileLines > 0)
|
|
104
|
+
totalLines = largestFileLines;
|
|
105
|
+
}
|
|
106
|
+
// Console/debug statement count -- use grepCount helper for reliability
|
|
107
|
+
const jsConsoleCount = grepCount(cwd, 'console\\.(log|error|warn)', ['*.ts', '*.tsx', '*.js']);
|
|
108
|
+
const pyPrintCount = grepCount(cwd, '\\bprint\\(', ['*.py']);
|
|
109
|
+
const goPrintCount = grepCount(cwd, 'fmt\\.Print', ['*.go']);
|
|
110
|
+
const consoleLogCount = jsConsoleCount + pyPrintCount + goPrintCount;
|
|
111
|
+
// TypeScript ": any" count
|
|
112
|
+
const anyTypeCount = grepCount(cwd, ': any', ['*.ts', '*.tsx']);
|
|
113
|
+
// Documentation
|
|
114
|
+
const readmeExists = (0, runner_1.fileExists)(cwd, 'README.md', 'readme.md');
|
|
115
|
+
const readmeLines = parseInt((0, runner_1.run)("wc -l README.md 2>/dev/null | awk '{print $1}'", cwd)) || 0;
|
|
116
|
+
const docCommentFiles = (0, runner_1.countLines)("grep -rlE '/\\*\\*|^\"\"\"|^[[:space:]]*#[[:space:]]' --include='*.ts' --include='*.py' --include='*.go' . 2>/dev/null | grep -v node_modules | grep -v dist", cwd);
|
|
117
|
+
const apiDocsExist = (0, runner_1.fileExists)(cwd, 'openapi.json', 'openapi.yaml', 'swagger.json', 'swagger.yaml');
|
|
118
|
+
const architectureDocsExist = (0, runner_1.fileExists)(cwd, 'ARCHITECTURE.md', 'docs/', 'ADR/', 'adr/');
|
|
119
|
+
const contributingExists = (0, runner_1.fileExists)(cwd, 'CONTRIBUTING.md');
|
|
120
|
+
const changelogExists = (0, runner_1.fileExists)(cwd, 'CHANGELOG.md', 'CHANGES.md');
|
|
121
|
+
// Security -- grep-based secret detection (Layer 0 fallback, overridden by gitleaks when available)
|
|
122
|
+
const secretPatterns = [
|
|
123
|
+
{ pattern: 'password[[:space:]]*[:=]', rule: 'hardcoded-password' },
|
|
124
|
+
{ pattern: 'api[_-]?key[[:space:]]*[:=]', rule: 'hardcoded-api-key' },
|
|
125
|
+
{ pattern: 'secret[[:space:]]*[:=]', rule: 'hardcoded-secret' },
|
|
126
|
+
{ pattern: 'BEGIN.*PRIVATE KEY', rule: 'private-key-in-source' },
|
|
127
|
+
{ pattern: 'AKIA[0-9A-Z]{16}', rule: 'aws-access-key' },
|
|
128
|
+
{ pattern: 'ghp_[a-zA-Z0-9]{36}', rule: 'github-token' },
|
|
129
|
+
{ pattern: 'sk-ant-[a-zA-Z0-9]', rule: 'anthropic-api-key' },
|
|
130
|
+
];
|
|
131
|
+
const secretDetails = [];
|
|
132
|
+
for (const sp of secretPatterns) {
|
|
133
|
+
const findings = (0, runner_1.run)(`grep -rnE '${sp.pattern}' --include='*.ts' --include='*.js' --include='*.py' --include='*.go' . 2>/dev/null | grep -v node_modules | grep -v dist | grep -v '.d.ts' | head -20`, cwd);
|
|
134
|
+
for (const line of findings.split('\n').filter((l) => l.trim())) {
|
|
135
|
+
const match = line.match(/^\.\/(.+?):(\d+):/);
|
|
136
|
+
if (match) {
|
|
137
|
+
secretDetails.push({
|
|
138
|
+
file: match[1],
|
|
139
|
+
line: parseInt(match[2]),
|
|
140
|
+
rule: sp.rule,
|
|
141
|
+
severity: sp.rule.includes('private-key') || sp.rule.includes('password') ? 'critical' : 'high',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const evalCount = parseInt((0, runner_1.run)("grep -rnE '\\beval\\(' --include='*.ts' --include='*.js' --include='*.py' . 2>/dev/null | grep -v node_modules | grep -v dist | wc -l", cwd)) || 0;
|
|
147
|
+
const privateKeyFiles = (0, runner_1.countLines)(`find . \\( -name "*.key" -o -name "*.pem" \\) ${EXCLUDE} 2>/dev/null`, cwd);
|
|
148
|
+
const envFilesInGit = (0, runner_1.countLines)('git ls-files .env .env.* 2>/dev/null', cwd);
|
|
149
|
+
const tlsDisabledCount = parseInt((0, runner_1.run)("grep -rnE 'NODE_TLS_REJECT_UNAUTHORIZED.*0|rejectUnauthorized.*false|VERIFY_SSL.*false' --include='*.ts' --include='*.js' --include='*.py' . 2>/dev/null | grep -v node_modules | wc -l", cwd)) || 0;
|
|
150
|
+
// Maintainability
|
|
151
|
+
const controllers = (0, runner_1.countLines)(`find . \\( -path "*/controllers/*" -name "*.ts" -o -path "*/handlers/*" -name "*.go" -o -path "*/views/*" -name "*.py" \\) ${EXCLUDE} 2>/dev/null`, cwd);
|
|
152
|
+
const models = (0, runner_1.countLines)(`find . -path "*/models/*" -type f ${SOURCE_EXTS} ${EXCLUDE} 2>/dev/null`, cwd);
|
|
153
|
+
const directories = (0, runner_1.countLines)(`find . -type d ${EXCLUDE} 2>/dev/null`, cwd);
|
|
154
|
+
// Developer Experience
|
|
155
|
+
const ciConfigCount = (0, runner_1.countLines)('find .github/workflows -name "*.yml" -o -name "*.yaml" 2>/dev/null; ls .gitlab-ci.yml Jenkinsfile .circleci/config.yml 2>/dev/null', cwd);
|
|
156
|
+
const dockerConfigCount = (0, runner_1.countLines)('ls Dockerfile docker-compose.yml docker-compose.yaml .devcontainer/devcontainer.json 2>/dev/null', cwd);
|
|
157
|
+
const precommitConfigCount = (0, runner_1.countLines)('ls -d .husky .pre-commit-config.yaml .git/hooks/pre-commit 2>/dev/null', cwd);
|
|
158
|
+
const makefileExists = (0, runner_1.fileExists)(cwd, 'Makefile', 'justfile', 'Taskfile.yml');
|
|
159
|
+
const envExampleExists = (0, runner_1.fileExists)(cwd, '.env.example', '.env.sample', '.env.template');
|
|
160
|
+
// Coverage config
|
|
161
|
+
const coverageConfigExists = (0, runner_1.fileExists)(cwd, '.nycrc', '.nycrc.json', '.c8rc', '.c8rc.json', 'jest.config.js', 'jest.config.ts', 'vitest.config.ts', 'vitest.config.js', '.coveragerc', 'setup.cfg', 'pytest.ini');
|
|
162
|
+
return {
|
|
163
|
+
sourceFiles,
|
|
164
|
+
testFiles: testFiles + testDirFiles,
|
|
165
|
+
totalLines,
|
|
166
|
+
coverageConfigExists,
|
|
167
|
+
filesOver500Lines,
|
|
168
|
+
largestFileLines,
|
|
169
|
+
largestFilePath,
|
|
170
|
+
consoleLogCount,
|
|
171
|
+
anyTypeCount,
|
|
172
|
+
readmeExists,
|
|
173
|
+
readmeLines,
|
|
174
|
+
docCommentFiles,
|
|
175
|
+
apiDocsExist,
|
|
176
|
+
architectureDocsExist,
|
|
177
|
+
contributingExists,
|
|
178
|
+
changelogExists,
|
|
179
|
+
secretFindings: secretDetails.length,
|
|
180
|
+
secretDetails,
|
|
181
|
+
evalCount,
|
|
182
|
+
privateKeyFiles,
|
|
183
|
+
envFilesInGit,
|
|
184
|
+
tlsDisabledCount,
|
|
185
|
+
controllers,
|
|
186
|
+
models,
|
|
187
|
+
directories,
|
|
188
|
+
ciConfigCount,
|
|
189
|
+
dockerConfigCount,
|
|
190
|
+
precommitConfigCount,
|
|
191
|
+
makefileExists,
|
|
192
|
+
envExampleExists,
|
|
193
|
+
coveragePercent: null,
|
|
194
|
+
toolsUsed: ['grep', 'find', 'wc', 'git'],
|
|
195
|
+
toolsUnavailable: [],
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=generic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/analyzers/tools/generic.ts"],"names":[],"mappings":"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"}
|