@grafema/core 0.2.0-beta → 0.2.3-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.
|
@@ -26,6 +26,12 @@ import type { AttrQuery, GraphStats, GraphExport } from '../../core/GraphBackend
|
|
|
26
26
|
export interface RFDBServerBackendOptions {
|
|
27
27
|
socketPath?: string;
|
|
28
28
|
dbPath?: string;
|
|
29
|
+
/**
|
|
30
|
+
* If true, automatically start the server if not running.
|
|
31
|
+
* If false, require explicit `grafema server start`.
|
|
32
|
+
* Default: true (for backwards compatibility)
|
|
33
|
+
*/
|
|
34
|
+
autoStart?: boolean;
|
|
29
35
|
}
|
|
30
36
|
/**
|
|
31
37
|
* Input node format (flexible)
|
|
@@ -70,6 +76,7 @@ export interface BackendStats extends GraphStats {
|
|
|
70
76
|
export declare class RFDBServerBackend {
|
|
71
77
|
readonly socketPath: string;
|
|
72
78
|
readonly dbPath: string | undefined;
|
|
79
|
+
private readonly autoStart;
|
|
73
80
|
private client;
|
|
74
81
|
private serverProcess;
|
|
75
82
|
connected: boolean;
|
|
@@ -78,7 +85,9 @@ export declare class RFDBServerBackend {
|
|
|
78
85
|
private _cachedEdgeCounts;
|
|
79
86
|
constructor(options?: RFDBServerBackendOptions);
|
|
80
87
|
/**
|
|
81
|
-
* Connect to RFDB server
|
|
88
|
+
* Connect to RFDB server.
|
|
89
|
+
* If autoStart is true (default), starts the server if not running.
|
|
90
|
+
* If autoStart is false, requires explicit `grafema server start`.
|
|
82
91
|
*/
|
|
83
92
|
connect(): Promise<void>;
|
|
84
93
|
/**
|
|
@@ -89,7 +98,8 @@ export declare class RFDBServerBackend {
|
|
|
89
98
|
* Find RFDB server binary in order of preference:
|
|
90
99
|
* 1. packages/rfdb-server/target/release (monorepo development - prioritized for dev)
|
|
91
100
|
* 2. packages/rfdb-server/target/debug
|
|
92
|
-
* 3. @grafema/rfdb npm package
|
|
101
|
+
* 3. @grafema/rfdb npm package
|
|
102
|
+
* 4. ~/.local/bin/rfdb-server (user-installed binary)
|
|
93
103
|
*/
|
|
94
104
|
private _findServerBinary;
|
|
95
105
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RFDBServerBackend.d.ts","sourceRoot":"","sources":["../../../src/storage/backends/RFDBServerBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAKrF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"RFDBServerBackend.d.ts","sourceRoot":"","sources":["../../../src/storage/backends/RFDBServerBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@ const __dirname = dirname(__filename);
|
|
|
29
29
|
export class RFDBServerBackend {
|
|
30
30
|
socketPath;
|
|
31
31
|
dbPath;
|
|
32
|
+
autoStart;
|
|
32
33
|
client;
|
|
33
34
|
serverProcess;
|
|
34
35
|
connected; // Public for compatibility
|
|
@@ -37,6 +38,7 @@ export class RFDBServerBackend {
|
|
|
37
38
|
_cachedEdgeCounts;
|
|
38
39
|
constructor(options = {}) {
|
|
39
40
|
this.dbPath = options.dbPath;
|
|
41
|
+
this.autoStart = options.autoStart ?? true; // Default true for backwards compat
|
|
40
42
|
// Default socket path: next to the database in .grafema folder
|
|
41
43
|
// This ensures each project has its own socket, avoiding conflicts
|
|
42
44
|
if (options.socketPath) {
|
|
@@ -54,7 +56,9 @@ export class RFDBServerBackend {
|
|
|
54
56
|
this.edgeTypes = new Set();
|
|
55
57
|
}
|
|
56
58
|
/**
|
|
57
|
-
* Connect to RFDB server
|
|
59
|
+
* Connect to RFDB server.
|
|
60
|
+
* If autoStart is true (default), starts the server if not running.
|
|
61
|
+
* If autoStart is false, requires explicit `grafema server start`.
|
|
58
62
|
*/
|
|
59
63
|
async connect() {
|
|
60
64
|
if (this.connected)
|
|
@@ -66,14 +70,18 @@ export class RFDBServerBackend {
|
|
|
66
70
|
// Verify server is responsive
|
|
67
71
|
await this.client.ping();
|
|
68
72
|
this.connected = true;
|
|
69
|
-
console.log(`[RFDBServerBackend] Connected to
|
|
73
|
+
console.log(`[RFDBServerBackend] Connected to RFDB server at ${this.socketPath}`);
|
|
70
74
|
return;
|
|
71
75
|
}
|
|
72
76
|
catch {
|
|
73
|
-
// Server not running
|
|
77
|
+
// Server not running
|
|
78
|
+
if (!this.autoStart) {
|
|
79
|
+
throw new Error(`RFDB server not running at ${this.socketPath}\n` +
|
|
80
|
+
`Start the server first: grafema server start`);
|
|
81
|
+
}
|
|
74
82
|
console.log(`[RFDBServerBackend] RFDB server not running, starting...`);
|
|
75
83
|
}
|
|
76
|
-
// Start the server
|
|
84
|
+
// Start the server (only if autoStart is true)
|
|
77
85
|
await this._startServer();
|
|
78
86
|
// Connect again
|
|
79
87
|
this.client = new RFDBClient(this.socketPath);
|
|
@@ -92,7 +100,8 @@ export class RFDBServerBackend {
|
|
|
92
100
|
* Find RFDB server binary in order of preference:
|
|
93
101
|
* 1. packages/rfdb-server/target/release (monorepo development - prioritized for dev)
|
|
94
102
|
* 2. packages/rfdb-server/target/debug
|
|
95
|
-
* 3. @grafema/rfdb npm package
|
|
103
|
+
* 3. @grafema/rfdb npm package
|
|
104
|
+
* 4. ~/.local/bin/rfdb-server (user-installed binary)
|
|
96
105
|
*/
|
|
97
106
|
_findServerBinary() {
|
|
98
107
|
// 1. Check packages/rfdb-server in monorepo (prioritized for development)
|
|
@@ -108,7 +117,7 @@ export class RFDBServerBackend {
|
|
|
108
117
|
console.log(`[RFDBServerBackend] Found debug binary: ${debugBinary}`);
|
|
109
118
|
return debugBinary;
|
|
110
119
|
}
|
|
111
|
-
// 3. Check @grafema/rfdb npm package
|
|
120
|
+
// 3. Check @grafema/rfdb npm package
|
|
112
121
|
try {
|
|
113
122
|
const require = createRequire(import.meta.url);
|
|
114
123
|
const rfdbPkg = require.resolve('@grafema/rfdb');
|
|
@@ -134,6 +143,12 @@ export class RFDBServerBackend {
|
|
|
134
143
|
catch {
|
|
135
144
|
// @grafema/rfdb not installed
|
|
136
145
|
}
|
|
146
|
+
// 4. Check ~/.local/bin (user-installed binary for unsupported platforms)
|
|
147
|
+
const homeBinary = join(process.env.HOME || '', '.local', 'bin', 'rfdb-server');
|
|
148
|
+
if (existsSync(homeBinary)) {
|
|
149
|
+
console.log(`[RFDBServerBackend] Found user binary: ${homeBinary}`);
|
|
150
|
+
return homeBinary;
|
|
151
|
+
}
|
|
137
152
|
return null;
|
|
138
153
|
}
|
|
139
154
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grafema/core",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3-beta",
|
|
4
4
|
"description": "Core analysis engine for Grafema code analysis toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"node-source-walk": "^7.0.1",
|
|
43
43
|
"oxc-parser": "^0.96.0",
|
|
44
44
|
"yaml": "^2.8.2",
|
|
45
|
-
"@grafema/rfdb-client": "0.2.
|
|
46
|
-
"@grafema/types": "0.2.
|
|
45
|
+
"@grafema/rfdb-client": "0.2.1-beta",
|
|
46
|
+
"@grafema/types": "0.2.1-beta"
|
|
47
47
|
},
|
|
48
48
|
"optionalDependencies": {
|
|
49
49
|
"@grafema/rfdb": "^0.1.0-alpha.2"
|
|
@@ -40,6 +40,12 @@ const __dirname = dirname(__filename);
|
|
|
40
40
|
export interface RFDBServerBackendOptions {
|
|
41
41
|
socketPath?: string;
|
|
42
42
|
dbPath?: string;
|
|
43
|
+
/**
|
|
44
|
+
* If true, automatically start the server if not running.
|
|
45
|
+
* If false, require explicit `grafema server start`.
|
|
46
|
+
* Default: true (for backwards compatibility)
|
|
47
|
+
*/
|
|
48
|
+
autoStart?: boolean;
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
/**
|
|
@@ -89,6 +95,7 @@ export interface BackendStats extends GraphStats {
|
|
|
89
95
|
export class RFDBServerBackend {
|
|
90
96
|
readonly socketPath: string;
|
|
91
97
|
readonly dbPath: string | undefined;
|
|
98
|
+
private readonly autoStart: boolean;
|
|
92
99
|
private client: RFDBClient | null;
|
|
93
100
|
private serverProcess: ChildProcess | null;
|
|
94
101
|
connected: boolean; // Public for compatibility
|
|
@@ -98,6 +105,7 @@ export class RFDBServerBackend {
|
|
|
98
105
|
|
|
99
106
|
constructor(options: RFDBServerBackendOptions = {}) {
|
|
100
107
|
this.dbPath = options.dbPath;
|
|
108
|
+
this.autoStart = options.autoStart ?? true; // Default true for backwards compat
|
|
101
109
|
// Default socket path: next to the database in .grafema folder
|
|
102
110
|
// This ensures each project has its own socket, avoiding conflicts
|
|
103
111
|
if (options.socketPath) {
|
|
@@ -114,7 +122,9 @@ export class RFDBServerBackend {
|
|
|
114
122
|
}
|
|
115
123
|
|
|
116
124
|
/**
|
|
117
|
-
* Connect to RFDB server
|
|
125
|
+
* Connect to RFDB server.
|
|
126
|
+
* If autoStart is true (default), starts the server if not running.
|
|
127
|
+
* If autoStart is false, requires explicit `grafema server start`.
|
|
118
128
|
*/
|
|
119
129
|
async connect(): Promise<void> {
|
|
120
130
|
if (this.connected) return;
|
|
@@ -127,14 +137,20 @@ export class RFDBServerBackend {
|
|
|
127
137
|
// Verify server is responsive
|
|
128
138
|
await this.client.ping();
|
|
129
139
|
this.connected = true;
|
|
130
|
-
console.log(`[RFDBServerBackend] Connected to
|
|
140
|
+
console.log(`[RFDBServerBackend] Connected to RFDB server at ${this.socketPath}`);
|
|
131
141
|
return;
|
|
132
142
|
} catch {
|
|
133
|
-
// Server not running
|
|
143
|
+
// Server not running
|
|
144
|
+
if (!this.autoStart) {
|
|
145
|
+
throw new Error(
|
|
146
|
+
`RFDB server not running at ${this.socketPath}\n` +
|
|
147
|
+
`Start the server first: grafema server start`
|
|
148
|
+
);
|
|
149
|
+
}
|
|
134
150
|
console.log(`[RFDBServerBackend] RFDB server not running, starting...`);
|
|
135
151
|
}
|
|
136
152
|
|
|
137
|
-
// Start the server
|
|
153
|
+
// Start the server (only if autoStart is true)
|
|
138
154
|
await this._startServer();
|
|
139
155
|
|
|
140
156
|
// Connect again
|
|
@@ -156,7 +172,8 @@ export class RFDBServerBackend {
|
|
|
156
172
|
* Find RFDB server binary in order of preference:
|
|
157
173
|
* 1. packages/rfdb-server/target/release (monorepo development - prioritized for dev)
|
|
158
174
|
* 2. packages/rfdb-server/target/debug
|
|
159
|
-
* 3. @grafema/rfdb npm package
|
|
175
|
+
* 3. @grafema/rfdb npm package
|
|
176
|
+
* 4. ~/.local/bin/rfdb-server (user-installed binary)
|
|
160
177
|
*/
|
|
161
178
|
private _findServerBinary(): string | null {
|
|
162
179
|
// 1. Check packages/rfdb-server in monorepo (prioritized for development)
|
|
@@ -174,7 +191,7 @@ export class RFDBServerBackend {
|
|
|
174
191
|
return debugBinary;
|
|
175
192
|
}
|
|
176
193
|
|
|
177
|
-
// 3. Check @grafema/rfdb npm package
|
|
194
|
+
// 3. Check @grafema/rfdb npm package
|
|
178
195
|
try {
|
|
179
196
|
const require = createRequire(import.meta.url);
|
|
180
197
|
const rfdbPkg = require.resolve('@grafema/rfdb');
|
|
@@ -200,6 +217,13 @@ export class RFDBServerBackend {
|
|
|
200
217
|
// @grafema/rfdb not installed
|
|
201
218
|
}
|
|
202
219
|
|
|
220
|
+
// 4. Check ~/.local/bin (user-installed binary for unsupported platforms)
|
|
221
|
+
const homeBinary = join(process.env.HOME || '', '.local', 'bin', 'rfdb-server');
|
|
222
|
+
if (existsSync(homeBinary)) {
|
|
223
|
+
console.log(`[RFDBServerBackend] Found user binary: ${homeBinary}`);
|
|
224
|
+
return homeBinary;
|
|
225
|
+
}
|
|
226
|
+
|
|
203
227
|
return null;
|
|
204
228
|
}
|
|
205
229
|
|