gitblast 0.0.1

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 (49) hide show
  1. package/dist/analyzer.d.ts +12 -0
  2. package/dist/analyzer.d.ts.map +1 -0
  3. package/dist/analyzer.js +140 -0
  4. package/dist/analyzer.js.map +1 -0
  5. package/dist/ast-analyzer.d.ts +12 -0
  6. package/dist/ast-analyzer.d.ts.map +1 -0
  7. package/dist/ast-analyzer.js +274 -0
  8. package/dist/ast-analyzer.js.map +1 -0
  9. package/dist/blast-radius.d.ts +17 -0
  10. package/dist/blast-radius.d.ts.map +1 -0
  11. package/dist/blast-radius.js +82 -0
  12. package/dist/blast-radius.js.map +1 -0
  13. package/dist/call-graph.d.ts +8 -0
  14. package/dist/call-graph.d.ts.map +1 -0
  15. package/dist/call-graph.js +252 -0
  16. package/dist/call-graph.js.map +1 -0
  17. package/dist/call-resolver.d.ts +18 -0
  18. package/dist/call-resolver.d.ts.map +1 -0
  19. package/dist/call-resolver.js +130 -0
  20. package/dist/call-resolver.js.map +1 -0
  21. package/dist/file-scanner.d.ts +2 -0
  22. package/dist/file-scanner.d.ts.map +1 -0
  23. package/dist/file-scanner.js +42 -0
  24. package/dist/file-scanner.js.map +1 -0
  25. package/dist/function-blast-radius.d.ts +7 -0
  26. package/dist/function-blast-radius.d.ts.map +1 -0
  27. package/dist/function-blast-radius.js +52 -0
  28. package/dist/function-blast-radius.js.map +1 -0
  29. package/dist/git.d.ts +27 -0
  30. package/dist/git.d.ts.map +1 -0
  31. package/dist/git.js +69 -0
  32. package/dist/git.js.map +1 -0
  33. package/dist/index.d.ts +3 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +385 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/tool-runner.d.ts +65 -0
  38. package/dist/tool-runner.d.ts.map +1 -0
  39. package/dist/tool-runner.js +178 -0
  40. package/dist/tool-runner.js.map +1 -0
  41. package/dist/types.d.ts +92 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +2 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/web/assets/index-BEQJnpxt.js +17 -0
  46. package/dist/web/assets/index-CqmVdlle.css +1 -0
  47. package/dist/web/index.html +14 -0
  48. package/dist/web/vite.svg +1 -0
  49. package/package.json +44 -0
@@ -0,0 +1,178 @@
1
+ import { execSync } from "node:child_process";
2
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ const TOOL_TIMEOUT = 30_000; // 30s per tool
5
+ function tryExec(cmd, cwd) {
6
+ try {
7
+ const stdout = execSync(cmd, {
8
+ cwd,
9
+ timeout: TOOL_TIMEOUT,
10
+ stdio: ["pipe", "pipe", "pipe"],
11
+ encoding: "utf-8",
12
+ maxBuffer: 10 * 1024 * 1024,
13
+ });
14
+ return { stdout };
15
+ }
16
+ catch (err) {
17
+ // execSync throws on non-zero exit but stdout may still have valid JSON
18
+ if (err.stdout && typeof err.stdout === "string" && err.stdout.trim().length > 0) {
19
+ return { stdout: err.stdout };
20
+ }
21
+ const msg = err.killed
22
+ ? "Timed out after 30s"
23
+ : err.message?.includes("ENOENT") || err.message?.includes("not found")
24
+ ? "Not installed. Run: npm i -D knip (or the relevant tool)"
25
+ : err.stderr?.toString().slice(0, 200) || err.message || "Unknown error";
26
+ return { stdout: "", error: msg };
27
+ }
28
+ }
29
+ function runKnip(cwd) {
30
+ const { stdout, error } = tryExec("npx knip --reporter json 2>/dev/null", cwd);
31
+ if (error)
32
+ return { error };
33
+ if (!stdout.trim())
34
+ return { result: { unusedFiles: [], unusedExports: [], unusedTypes: [], unusedDependencies: [], unlistedDependencies: [], duplicateExports: [] } };
35
+ try {
36
+ const raw = JSON.parse(stdout);
37
+ return {
38
+ result: {
39
+ unusedFiles: raw.files ?? [],
40
+ unusedExports: (raw.exports ?? []).map((e) => ({
41
+ file: e.file ?? e.filePath ?? "",
42
+ name: e.name ?? e.symbol ?? "",
43
+ kind: e.type ?? e.kind ?? "unknown",
44
+ line: e.line ?? e.pos?.line ?? 0,
45
+ })),
46
+ unusedTypes: (raw.types ?? []).map((t) => ({
47
+ file: t.file ?? t.filePath ?? "",
48
+ name: t.name ?? t.symbol ?? "",
49
+ line: t.line ?? t.pos?.line ?? 0,
50
+ })),
51
+ unusedDependencies: (raw.dependencies ?? []).map((d) => ({
52
+ name: d.name ?? d.dependency ?? "",
53
+ packageJson: d.packageJson ?? d.file ?? "",
54
+ })),
55
+ unlistedDependencies: (raw.unlisted ?? []).map((u) => ({
56
+ name: u.name ?? u.dependency ?? "",
57
+ file: u.file ?? u.filePath ?? "",
58
+ })),
59
+ duplicateExports: (raw.duplicates ?? []).map((d) => ({
60
+ file: d.file ?? d.filePath ?? "",
61
+ name: d.name ?? d.symbol ?? "",
62
+ })),
63
+ },
64
+ };
65
+ }
66
+ catch {
67
+ return { error: "Failed to parse knip JSON output" };
68
+ }
69
+ }
70
+ function runDepCruiser(cwd) {
71
+ // Use a minimal rule config for circular dependency detection
72
+ const ruleConfig = JSON.stringify({
73
+ forbidden: [{ name: "no-circular", severity: "warn", from: {}, to: { circular: true } }],
74
+ });
75
+ const { stdout, error } = tryExec(`npx depcruise src --output-type json --no-config --do-not-follow "node_modules" --validate '${ruleConfig}' 2>/dev/null`, cwd);
76
+ if (error)
77
+ return { error };
78
+ if (!stdout.trim())
79
+ return { result: { circularDeps: [], orphanModules: [], violations: [] } };
80
+ try {
81
+ const raw = JSON.parse(stdout);
82
+ const violations = (raw.summary?.violations ?? []).map((v) => ({
83
+ rule: v.rule ?? "",
84
+ from: v.from ?? "",
85
+ to: v.to ?? "",
86
+ severity: v.severity ?? "warn",
87
+ }));
88
+ // Extract circular dependency cycles
89
+ const circularSet = new Set();
90
+ const circularDeps = [];
91
+ for (const v of violations) {
92
+ if (v.rule === "no-circular") {
93
+ const key = [v.from, v.to].sort().join("::");
94
+ if (!circularSet.has(key)) {
95
+ circularSet.add(key);
96
+ circularDeps.push({ cycle: [v.from, v.to], length: 2 });
97
+ }
98
+ }
99
+ }
100
+ // Find orphan modules
101
+ const orphanModules = (raw.modules ?? [])
102
+ .filter((m) => m.orphan === true)
103
+ .map((m) => m.source ?? "");
104
+ return { result: { circularDeps, orphanModules, violations } };
105
+ }
106
+ catch {
107
+ return { error: "Failed to parse dependency-cruiser JSON output" };
108
+ }
109
+ }
110
+ function runJscpd(cwd) {
111
+ const tmpDir = join(cwd, ".gitblast", "jscpd-out");
112
+ mkdirSync(tmpDir, { recursive: true });
113
+ const { stdout, error } = tryExec(`npx jscpd --reporters json --output "${tmpDir}" --ignore "node_modules,dist,build,.next,.nuxt,coverage" . 2>/dev/null`, cwd);
114
+ if (error)
115
+ return { error };
116
+ // jscpd writes to a JSON file in the output directory
117
+ const reportPath = join(tmpDir, "jscpd-report.json");
118
+ if (!existsSync(reportPath)) {
119
+ return { result: { duplicates: [], totalDuplication: 0 } };
120
+ }
121
+ try {
122
+ const raw = JSON.parse(readFileSync(reportPath, "utf-8"));
123
+ const duplicates = (raw.duplicates ?? []).map((d) => ({
124
+ firstFile: d.firstFile?.name ?? "",
125
+ firstStart: d.firstFile?.startLoc?.line ?? 0,
126
+ firstEnd: d.firstFile?.endLoc?.line ?? 0,
127
+ secondFile: d.secondFile?.name ?? "",
128
+ secondStart: d.secondFile?.startLoc?.line ?? 0,
129
+ secondEnd: d.secondFile?.endLoc?.line ?? 0,
130
+ lines: d.lines ?? 0,
131
+ tokens: d.tokens ?? 0,
132
+ }));
133
+ const totalDuplication = raw.statistics?.total?.percentage ?? 0;
134
+ return { result: { duplicates, totalDuplication } };
135
+ }
136
+ catch {
137
+ return { error: "Failed to parse jscpd JSON output" };
138
+ }
139
+ }
140
+ export async function runTools(cwd) {
141
+ const errors = [];
142
+ // Run all tools in parallel
143
+ const [knipOut, depCruiserOut, jscpdOut] = await Promise.all([
144
+ Promise.resolve(runKnip(cwd)),
145
+ Promise.resolve(runDepCruiser(cwd)),
146
+ Promise.resolve(runJscpd(cwd)),
147
+ ]);
148
+ if (knipOut.error)
149
+ errors.push({ tool: "knip", message: knipOut.error });
150
+ if (depCruiserOut.error)
151
+ errors.push({ tool: "dependency-cruiser", message: depCruiserOut.error });
152
+ if (jscpdOut.error)
153
+ errors.push({ tool: "jscpd", message: jscpdOut.error });
154
+ const results = {
155
+ knip: knipOut.result,
156
+ depCruiser: depCruiserOut.result,
157
+ jscpd: jscpdOut.result,
158
+ errors,
159
+ cachedAt: new Date().toISOString(),
160
+ };
161
+ // Cache to disk
162
+ const cacheDir = join(cwd, ".gitblast", "cache");
163
+ mkdirSync(cacheDir, { recursive: true });
164
+ writeFileSync(join(cacheDir, "tools.json"), JSON.stringify(results, null, 2));
165
+ return results;
166
+ }
167
+ export function loadCachedTools(cwd) {
168
+ const cachePath = join(cwd, ".gitblast", "cache", "tools.json");
169
+ if (!existsSync(cachePath))
170
+ return null;
171
+ try {
172
+ return JSON.parse(readFileSync(cachePath, "utf-8"));
173
+ }
174
+ catch {
175
+ return null;
176
+ }
177
+ }
178
+ //# sourceMappingURL=tool-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-runner.js","sourceRoot":"","sources":["../src/tool-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ export interface GraphData {
2
+ rootDir: string;
3
+ analyzedAt: string;
4
+ nodes: FileNode[];
5
+ edges: DependencyEdge[];
6
+ directories: DirectoryNode[];
7
+ scopes: FunctionScope[];
8
+ callEdges: CallEdge[];
9
+ }
10
+ export interface DirectoryNode {
11
+ id: string;
12
+ name: string;
13
+ parentDir: string | null;
14
+ depth: number;
15
+ }
16
+ export interface FileNode {
17
+ id: string;
18
+ filePath: string;
19
+ directory: string;
20
+ fileName: string;
21
+ language: "typescript" | "javascript" | "tsx" | "jsx";
22
+ exports: ExportInfo[];
23
+ imports: ImportInfo[];
24
+ linesOfCode: number;
25
+ }
26
+ export interface ExportInfo {
27
+ name: string;
28
+ kind: "function" | "variable" | "class" | "type" | "interface" | "enum" | "default" | "unknown";
29
+ line: number;
30
+ }
31
+ export interface ImportInfo {
32
+ names: string[];
33
+ source: string;
34
+ resolvedPath: string | null;
35
+ isDefault: boolean;
36
+ isNamespace: boolean;
37
+ isExternal: boolean;
38
+ }
39
+ export interface DependencyEdge {
40
+ source: string;
41
+ target: string;
42
+ imports: string[];
43
+ }
44
+ export interface BlastRadiusResult {
45
+ sourceFile: string;
46
+ affected: BlastRadiusEntry[];
47
+ }
48
+ export interface BlastRadiusEntry {
49
+ fileId: string;
50
+ depth: number;
51
+ importedNames: string[];
52
+ }
53
+ export interface FunctionScope {
54
+ id: string;
55
+ name: string;
56
+ fileId: string;
57
+ kind: "function" | "class" | "method" | "variable" | "arrow" | "module";
58
+ line: number;
59
+ isExported: boolean;
60
+ }
61
+ export interface CallEdge {
62
+ caller: string;
63
+ callee: string;
64
+ callExpression: string;
65
+ line: number;
66
+ }
67
+ export interface FunctionBlastRadiusResult {
68
+ sourceFunction: string;
69
+ sourceFile: string;
70
+ affected: FunctionBlastRadiusEntry[];
71
+ }
72
+ export interface FunctionBlastRadiusEntry {
73
+ functionId: string;
74
+ fileId: string;
75
+ functionName: string;
76
+ depth: number;
77
+ }
78
+ export interface RawCallSite {
79
+ calledName: string;
80
+ objectName?: string;
81
+ propertyName?: string;
82
+ enclosingScope: string;
83
+ line: number;
84
+ isJsx: boolean;
85
+ isNew: boolean;
86
+ }
87
+ export interface FileCallData {
88
+ fileId: string;
89
+ scopes: FunctionScope[];
90
+ callSites: RawCallSite[];
91
+ }
92
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}