@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, starting it if necessary
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 (fallback for production)
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":"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"}
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, starting it if necessary
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 existing RFDB server at ${this.socketPath}`);
73
+ console.log(`[RFDBServerBackend] Connected to RFDB server at ${this.socketPath}`);
70
74
  return;
71
75
  }
72
76
  catch {
73
- // Server not running, need to start it
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 (fallback for production)
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 (fallback)
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.0-beta",
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.0-beta",
46
- "@grafema/types": "0.2.0-beta"
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, starting it if necessary
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 existing RFDB server at ${this.socketPath}`);
140
+ console.log(`[RFDBServerBackend] Connected to RFDB server at ${this.socketPath}`);
131
141
  return;
132
142
  } catch {
133
- // Server not running, need to start it
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 (fallback for production)
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 (fallback)
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