@grafema/cli 0.3.8-beta → 0.3.9-beta

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.
@@ -1 +1 @@
1
- {"version":3,"file":"analyzeAction.d.ts","sourceRoot":"","sources":["../../src/commands/analyzeAction.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAG1H;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAmB,GAAG,IAAI,CAE9F;AA2CD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuKrQ"}
1
+ {"version":3,"file":"analyzeAction.d.ts","sourceRoot":"","sources":["../../src/commands/analyzeAction.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAG1H;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAmB,GAAG,IAAI,CAE9F;AAgHD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+JrQ"}
@@ -7,9 +7,9 @@
7
7
  * the correct args, streams output, and prints a summary.
8
8
  */
9
9
  import { resolve, join } from 'path';
10
- import { existsSync, mkdirSync } from 'fs';
10
+ import { existsSync, mkdirSync, readFileSync } from 'fs';
11
11
  import { spawn } from 'child_process';
12
- import { RFDBServerBackend, createLogger, findOrchestratorBinary, getBinaryNotFoundMessage, findAnalyzerBinary, ensureBinary, } from '@grafema/util';
12
+ import { RFDBServerBackend, createLogger, findOrchestratorBinary, getBinaryNotFoundMessage, findAnalyzerBinary, findInGrafemaBin, ensureBinary, } from '@grafema/util';
13
13
  export async function fetchNodeEdgeCounts(backend) {
14
14
  const [nodeCount, edgeCount] = await Promise.all([backend.nodeCount(), backend.edgeCount()]);
15
15
  return { nodeCount, edgeCount };
@@ -56,6 +56,72 @@ function findConfigFile(projectPath) {
56
56
  }
57
57
  return null;
58
58
  }
59
+ /** Map of file extensions to required analyzer binaries. */
60
+ const EXT_TO_BINARIES = {
61
+ // JS/TS — always needed (core)
62
+ js: ['grafema-analyzer', 'grafema-resolve'],
63
+ ts: ['grafema-analyzer', 'grafema-resolve'],
64
+ jsx: ['grafema-analyzer', 'grafema-resolve'],
65
+ tsx: ['grafema-analyzer', 'grafema-resolve'],
66
+ mjs: ['grafema-analyzer', 'grafema-resolve'],
67
+ cjs: ['grafema-analyzer', 'grafema-resolve'],
68
+ // Python
69
+ py: ['grafema-python-analyzer', 'python-resolve'],
70
+ pyi: ['grafema-python-analyzer', 'python-resolve'],
71
+ // Haskell
72
+ hs: ['haskell-analyzer', 'haskell-resolve'],
73
+ // Rust
74
+ rs: ['grafema-rust-analyzer', 'grafema-rust-resolve'],
75
+ // Java
76
+ java: ['grafema-java-analyzer', 'java-resolve', 'java-parser'],
77
+ // Kotlin
78
+ kt: ['grafema-kotlin-analyzer', 'kotlin-resolve', 'kotlin-parser'],
79
+ kts: ['grafema-kotlin-analyzer', 'kotlin-resolve', 'kotlin-parser'],
80
+ // Go
81
+ go: ['grafema-go-analyzer', 'go-resolve', 'go-parser'],
82
+ // C/C++
83
+ c: ['grafema-cpp-analyzer', 'cpp-resolve'],
84
+ cpp: ['grafema-cpp-analyzer', 'cpp-resolve'],
85
+ h: ['grafema-cpp-analyzer', 'cpp-resolve'],
86
+ hpp: ['grafema-cpp-analyzer', 'cpp-resolve'],
87
+ // Swift
88
+ swift: ['grafema-swift-analyzer', 'swift-resolve', 'swift-parser'],
89
+ // Obj-C
90
+ m: ['grafema-objc-analyzer', 'objc-parser'],
91
+ mm: ['grafema-objc-analyzer', 'objc-parser'],
92
+ // BEAM (Elixir/Erlang)
93
+ ex: ['beam-analyzer', 'beam-resolve'],
94
+ exs: ['beam-analyzer', 'beam-resolve'],
95
+ erl: ['beam-analyzer', 'beam-resolve'],
96
+ };
97
+ /**
98
+ * Detect languages from config include patterns and ensure their analyzer binaries exist.
99
+ * Reads the config file as text, extracts file extensions from include globs,
100
+ * and pre-downloads missing binaries before the orchestrator needs them.
101
+ */
102
+ async function ensureLanguageBinaries(configPath, log) {
103
+ const configText = readFileSync(configPath, 'utf-8');
104
+ // Extract extensions from include patterns like "**/*.py", '**/*.ts', etc.
105
+ const neededBinaries = new Set();
106
+ for (const match of configText.matchAll(/\*\.(\w+)/g)) {
107
+ const ext = match[1];
108
+ const bins = EXT_TO_BINARIES[ext];
109
+ if (bins)
110
+ bins.forEach(b => neededBinaries.add(b));
111
+ }
112
+ // Always ensure JS/TS binaries (most common, default language)
113
+ for (const b of ['grafema-analyzer', 'grafema-resolve']) {
114
+ neededBinaries.add(b);
115
+ }
116
+ for (const binName of neededBinaries) {
117
+ if (findAnalyzerBinary(binName) || findInGrafemaBin(binName))
118
+ continue;
119
+ const downloaded = await ensureBinary(binName, null, log);
120
+ if (downloaded) {
121
+ log(`Downloaded ${binName} → ${downloaded}`);
122
+ }
123
+ }
124
+ }
59
125
  export async function analyzeAction(path, options) {
60
126
  const projectPath = resolve(path);
61
127
  const grafemaDir = join(projectPath, '.grafema');
@@ -91,16 +157,6 @@ export async function analyzeAction(path, options) {
91
157
  process.exit(1);
92
158
  }
93
159
  debug(`Using orchestrator: ${orchestratorBinary}`);
94
- // Ensure JS/TS analyzer binaries exist (lazy download if missing)
95
- for (const binName of ['grafema-analyzer', 'grafema-resolve']) {
96
- const existing = findAnalyzerBinary(binName);
97
- if (!existing) {
98
- const downloaded = await ensureBinary(binName, null, info);
99
- if (downloaded) {
100
- debug(`Downloaded ${binName} → ${downloaded}`);
101
- }
102
- }
103
- }
104
160
  // Find config file for the orchestrator
105
161
  const configPath = findConfigFile(projectPath);
106
162
  if (!configPath) {
@@ -119,6 +175,8 @@ export async function analyzeAction(path, options) {
119
175
  process.exit(1);
120
176
  }
121
177
  debug(`Using config: ${configPath}`);
178
+ // Ensure analyzer binaries exist for detected languages (lazy download if missing)
179
+ await ensureLanguageBinaries(configPath, debug);
122
180
  // Connect to RFDB server — auto-start by default (zero-config UX)
123
181
  const backend = new RFDBServerBackend({
124
182
  dbPath,
@@ -1 +1 @@
1
- {"version":3,"file":"analyzeAction.js","sourceRoot":"","sources":["../../src/commands/analyzeAction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzeAction.js","sourceRoot":"","sources":["../../src/commands/analyzeAction.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafema/cli",
3
- "version": "0.3.8-beta",
3
+ "version": "0.3.9-beta",
4
4
  "description": "CLI for Grafema code analysis toolkit",
5
5
  "type": "module",
6
6
  "main": "./dist/cli.js",
@@ -35,9 +35,9 @@
35
35
  "dependencies": {
36
36
  "commander": "^13.0.0",
37
37
  "yaml": "^2.8.2",
38
- "@grafema/types": "0.3.8-beta",
39
- "@grafema/api": "0.3.8-beta",
40
- "@grafema/util": "0.3.8-beta"
38
+ "@grafema/util": "0.3.9-beta",
39
+ "@grafema/api": "0.3.9-beta",
40
+ "@grafema/types": "0.3.9-beta"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/node": "^25.0.8",
@@ -8,7 +8,7 @@
8
8
  */
9
9
 
10
10
  import { resolve, join } from 'path';
11
- import { existsSync, mkdirSync } from 'fs';
11
+ import { existsSync, mkdirSync, readFileSync } from 'fs';
12
12
  import { spawn } from 'child_process';
13
13
  import {
14
14
  RFDBServerBackend,
@@ -16,6 +16,7 @@ import {
16
16
  findOrchestratorBinary,
17
17
  getBinaryNotFoundMessage,
18
18
  findAnalyzerBinary,
19
+ findInGrafemaBin,
19
20
  ensureBinary,
20
21
  } from '@grafema/util';
21
22
  import type { LogLevel } from '@grafema/util';
@@ -75,6 +76,75 @@ function findConfigFile(projectPath: string): string | null {
75
76
  return null;
76
77
  }
77
78
 
79
+ /** Map of file extensions to required analyzer binaries. */
80
+ const EXT_TO_BINARIES: Record<string, string[]> = {
81
+ // JS/TS — always needed (core)
82
+ js: ['grafema-analyzer', 'grafema-resolve'],
83
+ ts: ['grafema-analyzer', 'grafema-resolve'],
84
+ jsx: ['grafema-analyzer', 'grafema-resolve'],
85
+ tsx: ['grafema-analyzer', 'grafema-resolve'],
86
+ mjs: ['grafema-analyzer', 'grafema-resolve'],
87
+ cjs: ['grafema-analyzer', 'grafema-resolve'],
88
+ // Python
89
+ py: ['grafema-python-analyzer', 'python-resolve'],
90
+ pyi: ['grafema-python-analyzer', 'python-resolve'],
91
+ // Haskell
92
+ hs: ['haskell-analyzer', 'haskell-resolve'],
93
+ // Rust
94
+ rs: ['grafema-rust-analyzer', 'grafema-rust-resolve'],
95
+ // Java
96
+ java: ['grafema-java-analyzer', 'java-resolve', 'java-parser'],
97
+ // Kotlin
98
+ kt: ['grafema-kotlin-analyzer', 'kotlin-resolve', 'kotlin-parser'],
99
+ kts: ['grafema-kotlin-analyzer', 'kotlin-resolve', 'kotlin-parser'],
100
+ // Go
101
+ go: ['grafema-go-analyzer', 'go-resolve', 'go-parser'],
102
+ // C/C++
103
+ c: ['grafema-cpp-analyzer', 'cpp-resolve'],
104
+ cpp: ['grafema-cpp-analyzer', 'cpp-resolve'],
105
+ h: ['grafema-cpp-analyzer', 'cpp-resolve'],
106
+ hpp: ['grafema-cpp-analyzer', 'cpp-resolve'],
107
+ // Swift
108
+ swift: ['grafema-swift-analyzer', 'swift-resolve', 'swift-parser'],
109
+ // Obj-C
110
+ m: ['grafema-objc-analyzer', 'objc-parser'],
111
+ mm: ['grafema-objc-analyzer', 'objc-parser'],
112
+ // BEAM (Elixir/Erlang)
113
+ ex: ['beam-analyzer', 'beam-resolve'],
114
+ exs: ['beam-analyzer', 'beam-resolve'],
115
+ erl: ['beam-analyzer', 'beam-resolve'],
116
+ };
117
+
118
+ /**
119
+ * Detect languages from config include patterns and ensure their analyzer binaries exist.
120
+ * Reads the config file as text, extracts file extensions from include globs,
121
+ * and pre-downloads missing binaries before the orchestrator needs them.
122
+ */
123
+ async function ensureLanguageBinaries(configPath: string, log: (...args: unknown[]) => void): Promise<void> {
124
+ const configText = readFileSync(configPath, 'utf-8');
125
+
126
+ // Extract extensions from include patterns like "**/*.py", '**/*.ts', etc.
127
+ const neededBinaries = new Set<string>();
128
+ for (const match of configText.matchAll(/\*\.(\w+)/g)) {
129
+ const ext = match[1];
130
+ const bins = EXT_TO_BINARIES[ext];
131
+ if (bins) bins.forEach(b => neededBinaries.add(b));
132
+ }
133
+
134
+ // Always ensure JS/TS binaries (most common, default language)
135
+ for (const b of ['grafema-analyzer', 'grafema-resolve']) {
136
+ neededBinaries.add(b);
137
+ }
138
+
139
+ for (const binName of neededBinaries) {
140
+ if (findAnalyzerBinary(binName) || findInGrafemaBin(binName)) continue;
141
+ const downloaded = await ensureBinary(binName, null, log);
142
+ if (downloaded) {
143
+ log(`Downloaded ${binName} → ${downloaded}`);
144
+ }
145
+ }
146
+ }
147
+
78
148
  export async function analyzeAction(path: string, options: { service?: string; entrypoint?: string; clear?: boolean; quiet?: boolean; verbose?: boolean; debug?: boolean; logLevel?: string; logFile?: string; strict?: boolean; autoStart?: boolean }): Promise<void> {
79
149
  const projectPath = resolve(path);
80
150
  const grafemaDir = join(projectPath, '.grafema');
@@ -117,17 +187,6 @@ export async function analyzeAction(path: string, options: { service?: string; e
117
187
 
118
188
  debug(`Using orchestrator: ${orchestratorBinary}`);
119
189
 
120
- // Ensure JS/TS analyzer binaries exist (lazy download if missing)
121
- for (const binName of ['grafema-analyzer', 'grafema-resolve']) {
122
- const existing = findAnalyzerBinary(binName);
123
- if (!existing) {
124
- const downloaded = await ensureBinary(binName, null, info);
125
- if (downloaded) {
126
- debug(`Downloaded ${binName} → ${downloaded}`);
127
- }
128
- }
129
- }
130
-
131
190
  // Find config file for the orchestrator
132
191
  const configPath = findConfigFile(projectPath);
133
192
  if (!configPath) {
@@ -148,6 +207,9 @@ export async function analyzeAction(path: string, options: { service?: string; e
148
207
 
149
208
  debug(`Using config: ${configPath}`);
150
209
 
210
+ // Ensure analyzer binaries exist for detected languages (lazy download if missing)
211
+ await ensureLanguageBinaries(configPath, debug);
212
+
151
213
  // Connect to RFDB server — auto-start by default (zero-config UX)
152
214
  const backend = new RFDBServerBackend({
153
215
  dbPath,