@reifydb/react 0.4.2 → 0.4.7
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/dist/index.d.ts +12 -9
- package/dist/index.js +139 -110
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Column, SchemaNode, InferSchema } from '@reifydb/core';
|
|
2
2
|
export * from '@reifydb/core';
|
|
3
|
-
import { WsClientOptions, WsClient } from '@reifydb/client';
|
|
3
|
+
import { WsClientOptions, WsClient, HttpClient, JsonHttpClient, JsonWebsocketClient } from '@reifydb/client';
|
|
4
4
|
export * from '@reifydb/client';
|
|
5
5
|
import React, { ReactNode } from 'react';
|
|
6
6
|
|
|
7
7
|
interface ConnectionState {
|
|
8
|
-
client: WsClient | null;
|
|
8
|
+
client: WsClient | HttpClient | JsonHttpClient | JsonWebsocketClient | null;
|
|
9
9
|
isConnected: boolean;
|
|
10
10
|
isConnecting: boolean;
|
|
11
11
|
connectionError: string | null;
|
|
@@ -13,9 +13,12 @@ interface ConnectionState {
|
|
|
13
13
|
}
|
|
14
14
|
interface ConnectionConfig {
|
|
15
15
|
url?: string;
|
|
16
|
-
|
|
16
|
+
token?: string;
|
|
17
|
+
format?: 'json';
|
|
18
|
+
options?: Omit<WsClientOptions, 'url' | 'token'>;
|
|
17
19
|
}
|
|
18
20
|
declare const DEFAULT_CONFIG: ConnectionConfig;
|
|
21
|
+
declare const DEFAULT_URL = "ws://127.0.0.1:8090";
|
|
19
22
|
declare class Connection {
|
|
20
23
|
private state;
|
|
21
24
|
private config;
|
|
@@ -25,7 +28,7 @@ declare class Connection {
|
|
|
25
28
|
connect(url?: string, options?: Omit<WsClientOptions, 'url'>): Promise<void>;
|
|
26
29
|
disconnect(): Promise<void>;
|
|
27
30
|
reconnect(url?: string, options?: Omit<WsClientOptions, 'url'>): Promise<void>;
|
|
28
|
-
getClient(): WsClient | null;
|
|
31
|
+
getClient(): WsClient | HttpClient | JsonHttpClient | JsonWebsocketClient | null;
|
|
29
32
|
isConnected(): boolean;
|
|
30
33
|
isConnecting(): boolean;
|
|
31
34
|
getConnectionError(): string | null;
|
|
@@ -57,7 +60,7 @@ declare function useConnection(overrideConfig?: ConnectionConfig): {
|
|
|
57
60
|
connect: () => Promise<void>;
|
|
58
61
|
disconnect: () => Promise<void>;
|
|
59
62
|
reconnect: () => Promise<void>;
|
|
60
|
-
client: WsClient | null;
|
|
63
|
+
client: WsClient | HttpClient | JsonHttpClient | JsonWebsocketClient | null;
|
|
61
64
|
isConnected: boolean;
|
|
62
65
|
isConnecting: boolean;
|
|
63
66
|
connectionError: string | null;
|
|
@@ -83,7 +86,7 @@ declare function useQueryExecutor<T = any>(options?: QueryExecutorOptions): {
|
|
|
83
86
|
results: QueryResult<T>[] | undefined;
|
|
84
87
|
error: string | undefined;
|
|
85
88
|
executionTime: number | undefined;
|
|
86
|
-
query: (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]) => void
|
|
89
|
+
query: (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]) => Promise<void>;
|
|
87
90
|
cancelQuery: () => void;
|
|
88
91
|
};
|
|
89
92
|
|
|
@@ -121,7 +124,7 @@ declare function useCommandExecutor<T = any>(options?: CommandExecutorOptions):
|
|
|
121
124
|
results: CommandResult<T>[] | undefined;
|
|
122
125
|
error: string | undefined;
|
|
123
126
|
executionTime: number | undefined;
|
|
124
|
-
command: (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]) => void
|
|
127
|
+
command: (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]) => Promise<void>;
|
|
125
128
|
cancelCommand: () => void;
|
|
126
129
|
};
|
|
127
130
|
|
|
@@ -159,7 +162,7 @@ declare function useAdminExecutor<T = any>(options?: AdminExecutorOptions): {
|
|
|
159
162
|
results: AdminResult<T>[] | undefined;
|
|
160
163
|
error: string | undefined;
|
|
161
164
|
executionTime: number | undefined;
|
|
162
|
-
admin: (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]) => void
|
|
165
|
+
admin: (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]) => Promise<void>;
|
|
163
166
|
cancelAdmin: () => void;
|
|
164
167
|
};
|
|
165
168
|
|
|
@@ -223,4 +226,4 @@ interface TableInfo {
|
|
|
223
226
|
}
|
|
224
227
|
declare function useSchema(): [boolean, TableInfo[], string | undefined];
|
|
225
228
|
|
|
226
|
-
export { type AdminExecutorOptions, type AdminOptions, type AdminResult, type AdminState, type ChangeEvent, type ColumnInfo, type CommandExecutorOptions, type CommandOptions, type CommandResult, type CommandState, Connection, type ConnectionConfig, ConnectionContext, ConnectionProvider, type ConnectionProviderProps, DEFAULT_CONFIG, type QueryExecutorOptions, type QueryOptions, type QueryResult, type QueryState, type SubscriptionExecutorOptions, type SubscriptionOptions, type SubscriptionState, type TableInfo, clearConnection, getConnection, useAdminExecutor, useAdminMany, useAdminOne, useCommandExecutor, useCommandMany, useCommandOne, useConnection, useQueryExecutor, useQueryMany, useQueryOne, useSchema, useSubscription, useSubscriptionExecutor };
|
|
229
|
+
export { type AdminExecutorOptions, type AdminOptions, type AdminResult, type AdminState, type ChangeEvent, type ColumnInfo, type CommandExecutorOptions, type CommandOptions, type CommandResult, type CommandState, Connection, type ConnectionConfig, ConnectionContext, ConnectionProvider, type ConnectionProviderProps, DEFAULT_CONFIG, DEFAULT_URL, type QueryExecutorOptions, type QueryOptions, type QueryResult, type QueryState, type SubscriptionExecutorOptions, type SubscriptionOptions, type SubscriptionState, type TableInfo, clearConnection, getConnection, useAdminExecutor, useAdminMany, useAdminOne, useCommandExecutor, useCommandMany, useCommandOne, useConnection, useQueryExecutor, useQueryMany, useQueryOne, useSchema, useSubscription, useSubscriptionExecutor };
|
package/dist/index.js
CHANGED
|
@@ -6,12 +6,11 @@ export * from "@reifydb/client";
|
|
|
6
6
|
import { Client } from "@reifydb/client";
|
|
7
7
|
var DEFAULT_CONFIG = {
|
|
8
8
|
url: "ws://127.0.0.1:8090",
|
|
9
|
-
options: {
|
|
10
|
-
timeoutMs: 1e3
|
|
11
|
-
}
|
|
9
|
+
options: { timeoutMs: 3e4 }
|
|
12
10
|
};
|
|
11
|
+
var DEFAULT_URL = "ws://127.0.0.1:8090";
|
|
13
12
|
var Connection = class {
|
|
14
|
-
constructor(config) {
|
|
13
|
+
constructor(config = DEFAULT_CONFIG) {
|
|
15
14
|
this.state = {
|
|
16
15
|
client: null,
|
|
17
16
|
isConnected: false,
|
|
@@ -22,7 +21,7 @@ var Connection = class {
|
|
|
22
21
|
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
23
22
|
}
|
|
24
23
|
setConfig(config) {
|
|
25
|
-
this.config =
|
|
24
|
+
this.config = config;
|
|
26
25
|
}
|
|
27
26
|
getConfig() {
|
|
28
27
|
return this.config;
|
|
@@ -32,13 +31,20 @@ var Connection = class {
|
|
|
32
31
|
return;
|
|
33
32
|
}
|
|
34
33
|
const connectUrl = url || this.config.url || DEFAULT_CONFIG.url;
|
|
35
|
-
const connectOptions = { ...this.config.options, ...options };
|
|
34
|
+
const connectOptions = { token: this.config.token, ...this.config.options, ...options };
|
|
36
35
|
this.updateState({
|
|
37
36
|
isConnecting: true,
|
|
38
37
|
connectionError: null
|
|
39
38
|
});
|
|
40
39
|
try {
|
|
41
|
-
const
|
|
40
|
+
const isHttp = connectUrl.startsWith("http://") || connectUrl.startsWith("https://");
|
|
41
|
+
const isJson = this.config.format === "json";
|
|
42
|
+
let client;
|
|
43
|
+
if (isHttp) {
|
|
44
|
+
client = isJson ? Client.connect_json_http(connectUrl, connectOptions) : Client.connect_http(connectUrl, connectOptions);
|
|
45
|
+
} else {
|
|
46
|
+
client = isJson ? await Client.connect_json_ws(connectUrl, connectOptions) : await Client.connect_ws(connectUrl, connectOptions);
|
|
47
|
+
}
|
|
42
48
|
this.updateState({
|
|
43
49
|
client,
|
|
44
50
|
isConnected: true,
|
|
@@ -60,8 +66,10 @@ var Connection = class {
|
|
|
60
66
|
async disconnect() {
|
|
61
67
|
if (this.state.client) {
|
|
62
68
|
try {
|
|
63
|
-
this.state.client
|
|
64
|
-
|
|
69
|
+
if ("disconnect" in this.state.client) {
|
|
70
|
+
this.state.client.disconnect();
|
|
71
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
72
|
+
}
|
|
65
73
|
} catch (err) {
|
|
66
74
|
console.error("Error disconnecting:", err);
|
|
67
75
|
}
|
|
@@ -114,14 +122,14 @@ var Connection = class {
|
|
|
114
122
|
// src/connection/connection-pool.ts
|
|
115
123
|
var defaultConnection = null;
|
|
116
124
|
function getConnection(config) {
|
|
117
|
-
const effectiveConfig = config ? { ...DEFAULT_CONFIG, ...config } : DEFAULT_CONFIG;
|
|
118
125
|
if (!defaultConnection) {
|
|
119
|
-
|
|
126
|
+
const mergedConfig = { ...DEFAULT_CONFIG, ...config };
|
|
127
|
+
defaultConnection = new Connection(mergedConfig);
|
|
120
128
|
defaultConnection.connect().catch((err) => {
|
|
121
129
|
console.error("[ConnectionPool] Eager connect failed:", err);
|
|
122
130
|
});
|
|
123
|
-
} else {
|
|
124
|
-
defaultConnection.setConfig(
|
|
131
|
+
} else if (config) {
|
|
132
|
+
defaultConnection.setConfig({ ...DEFAULT_CONFIG, ...config });
|
|
125
133
|
}
|
|
126
134
|
return defaultConnection;
|
|
127
135
|
}
|
|
@@ -163,7 +171,10 @@ function useConnection(overrideConfig) {
|
|
|
163
171
|
if (overrideConfig) {
|
|
164
172
|
return getConnection(overrideConfig);
|
|
165
173
|
}
|
|
166
|
-
|
|
174
|
+
if (contextConnection) {
|
|
175
|
+
return contextConnection;
|
|
176
|
+
}
|
|
177
|
+
return getConnection();
|
|
167
178
|
});
|
|
168
179
|
const [state, setState] = useState(() => connection.getState());
|
|
169
180
|
useEffect2(() => {
|
|
@@ -197,29 +208,32 @@ function useQueryExecutor(options) {
|
|
|
197
208
|
error: void 0,
|
|
198
209
|
executionTime: void 0
|
|
199
210
|
});
|
|
200
|
-
const
|
|
211
|
+
const clientRef = useRef2(client);
|
|
212
|
+
clientRef.current = client;
|
|
201
213
|
const isMountedRef = useRef2(true);
|
|
202
214
|
useEffect3(() => {
|
|
203
215
|
return () => {
|
|
204
216
|
isMountedRef.current = false;
|
|
205
217
|
};
|
|
206
218
|
}, []);
|
|
219
|
+
const executionIdRef = useRef2(0);
|
|
220
|
+
const pendingRef = useRef2(null);
|
|
207
221
|
const query = useCallback(
|
|
208
222
|
(statements, params, schemas) => {
|
|
209
|
-
|
|
210
|
-
|
|
223
|
+
const currentClient = clientRef.current;
|
|
224
|
+
if (!currentClient) {
|
|
225
|
+
pendingRef.current = { statements, params, schemas };
|
|
226
|
+
setState((prev) => ({ ...prev, isExecuting: true, error: void 0 }));
|
|
227
|
+
return Promise.resolve();
|
|
211
228
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
results: void 0,
|
|
216
|
-
error: void 0,
|
|
217
|
-
executionTime: void 0
|
|
218
|
-
});
|
|
229
|
+
pendingRef.current = null;
|
|
230
|
+
const thisExecution = ++executionIdRef.current;
|
|
231
|
+
setState((prev) => ({ ...prev, isExecuting: true, error: void 0 }));
|
|
219
232
|
const startTime = Date.now();
|
|
220
|
-
(async () => {
|
|
233
|
+
return (async () => {
|
|
221
234
|
try {
|
|
222
|
-
const frameResults = await
|
|
235
|
+
const frameResults = await currentClient.query(statements, params || null, schemas || []) || [];
|
|
236
|
+
if (executionIdRef.current !== thisExecution) return;
|
|
223
237
|
const executionTime = Date.now() - startTime;
|
|
224
238
|
const results = frameResults.map((frame) => {
|
|
225
239
|
if (Array.isArray(frame) && frame.length > 0) {
|
|
@@ -233,15 +247,14 @@ function useQueryExecutor(options) {
|
|
|
233
247
|
return {
|
|
234
248
|
name: key,
|
|
235
249
|
type: dataType,
|
|
236
|
-
|
|
250
|
+
payload: []
|
|
237
251
|
};
|
|
238
252
|
});
|
|
239
253
|
} else {
|
|
240
254
|
columns = Object.keys(firstRow).map((key) => ({
|
|
241
255
|
name: key,
|
|
242
256
|
type: "Utf8",
|
|
243
|
-
|
|
244
|
-
data: []
|
|
257
|
+
payload: []
|
|
245
258
|
}));
|
|
246
259
|
}
|
|
247
260
|
return {
|
|
@@ -265,6 +278,7 @@ function useQueryExecutor(options) {
|
|
|
265
278
|
executionTime
|
|
266
279
|
});
|
|
267
280
|
} catch (err) {
|
|
281
|
+
if (executionIdRef.current !== thisExecution) return;
|
|
268
282
|
const executionTime = Date.now() - startTime;
|
|
269
283
|
let errorMessage = "Query execution failed";
|
|
270
284
|
if (err instanceof Error) {
|
|
@@ -276,36 +290,36 @@ function useQueryExecutor(options) {
|
|
|
276
290
|
}
|
|
277
291
|
console.error("Query execution failed:", errorMessage);
|
|
278
292
|
if (!isMountedRef.current) return;
|
|
279
|
-
setState({
|
|
293
|
+
setState((prev) => ({
|
|
294
|
+
...prev,
|
|
280
295
|
isExecuting: false,
|
|
281
|
-
results: void 0,
|
|
282
296
|
error: errorMessage,
|
|
283
297
|
executionTime
|
|
284
|
-
});
|
|
285
|
-
} finally {
|
|
286
|
-
abortControllerRef.current = null;
|
|
298
|
+
}));
|
|
287
299
|
}
|
|
288
300
|
})();
|
|
289
301
|
},
|
|
290
|
-
[
|
|
302
|
+
[]
|
|
291
303
|
);
|
|
292
|
-
|
|
293
|
-
if (
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
...prev,
|
|
297
|
-
isExecuting: false,
|
|
298
|
-
error: "Query cancelled"
|
|
299
|
-
}));
|
|
304
|
+
useEffect3(() => {
|
|
305
|
+
if (client && pendingRef.current) {
|
|
306
|
+
const { statements, params, schemas } = pendingRef.current;
|
|
307
|
+
query(statements, params, schemas);
|
|
300
308
|
}
|
|
309
|
+
}, [client, query]);
|
|
310
|
+
const cancelQuery = useCallback(() => {
|
|
311
|
+
executionIdRef.current++;
|
|
312
|
+
setState((prev) => ({
|
|
313
|
+
...prev,
|
|
314
|
+
isExecuting: false,
|
|
315
|
+
error: "Query cancelled"
|
|
316
|
+
}));
|
|
301
317
|
}, []);
|
|
302
318
|
return {
|
|
303
|
-
// State
|
|
304
319
|
isExecuting: state.isExecuting,
|
|
305
320
|
results: state.results,
|
|
306
321
|
error: state.error,
|
|
307
322
|
executionTime: state.executionTime,
|
|
308
|
-
// Actions
|
|
309
323
|
query,
|
|
310
324
|
cancelQuery
|
|
311
325
|
};
|
|
@@ -352,29 +366,33 @@ function useCommandExecutor(options) {
|
|
|
352
366
|
error: void 0,
|
|
353
367
|
executionTime: void 0
|
|
354
368
|
});
|
|
355
|
-
const
|
|
356
|
-
|
|
369
|
+
const clientRef = useRef3(client);
|
|
370
|
+
clientRef.current = client;
|
|
371
|
+
const isMountedRef = useRef3(false);
|
|
357
372
|
useEffect5(() => {
|
|
373
|
+
isMountedRef.current = true;
|
|
358
374
|
return () => {
|
|
359
375
|
isMountedRef.current = false;
|
|
360
376
|
};
|
|
361
377
|
}, []);
|
|
378
|
+
const executionIdRef = useRef3(0);
|
|
379
|
+
const pendingRef = useRef3(null);
|
|
362
380
|
const command = useCallback2(
|
|
363
381
|
(statements, params, schemas) => {
|
|
364
|
-
|
|
365
|
-
|
|
382
|
+
const currentClient = clientRef.current;
|
|
383
|
+
if (!currentClient) {
|
|
384
|
+
pendingRef.current = { statements, params, schemas };
|
|
385
|
+
setState((prev) => ({ ...prev, isExecuting: true, error: void 0 }));
|
|
386
|
+
return Promise.resolve();
|
|
366
387
|
}
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
results: void 0,
|
|
371
|
-
error: void 0,
|
|
372
|
-
executionTime: void 0
|
|
373
|
-
});
|
|
388
|
+
pendingRef.current = null;
|
|
389
|
+
const thisExecution = ++executionIdRef.current;
|
|
390
|
+
setState((prev) => ({ ...prev, isExecuting: true, error: void 0 }));
|
|
374
391
|
const startTime = Date.now();
|
|
375
|
-
(async () => {
|
|
392
|
+
return (async () => {
|
|
376
393
|
try {
|
|
377
|
-
const frameResults = await
|
|
394
|
+
const frameResults = await currentClient.command(statements, params || null, schemas || []) || [];
|
|
395
|
+
if (executionIdRef.current !== thisExecution) return;
|
|
378
396
|
const executionTime = Date.now() - startTime;
|
|
379
397
|
const results = frameResults.map((frame) => {
|
|
380
398
|
if (Array.isArray(frame) && frame.length > 0) {
|
|
@@ -388,15 +406,14 @@ function useCommandExecutor(options) {
|
|
|
388
406
|
return {
|
|
389
407
|
name: key,
|
|
390
408
|
type: dataType,
|
|
391
|
-
|
|
409
|
+
payload: []
|
|
392
410
|
};
|
|
393
411
|
});
|
|
394
412
|
} else {
|
|
395
413
|
columns = Object.keys(firstRow).map((key) => ({
|
|
396
414
|
name: key,
|
|
397
415
|
type: "Utf8",
|
|
398
|
-
|
|
399
|
-
data: []
|
|
416
|
+
payload: []
|
|
400
417
|
}));
|
|
401
418
|
}
|
|
402
419
|
return {
|
|
@@ -421,6 +438,7 @@ function useCommandExecutor(options) {
|
|
|
421
438
|
executionTime
|
|
422
439
|
});
|
|
423
440
|
} catch (err) {
|
|
441
|
+
if (executionIdRef.current !== thisExecution) return;
|
|
424
442
|
const executionTime = Date.now() - startTime;
|
|
425
443
|
let errorMessage = "Command execution failed";
|
|
426
444
|
if (err instanceof Error) {
|
|
@@ -432,36 +450,36 @@ function useCommandExecutor(options) {
|
|
|
432
450
|
}
|
|
433
451
|
console.error("Command execution failed:", errorMessage);
|
|
434
452
|
if (!isMountedRef.current) return;
|
|
435
|
-
setState({
|
|
453
|
+
setState((prev) => ({
|
|
454
|
+
...prev,
|
|
436
455
|
isExecuting: false,
|
|
437
|
-
results: void 0,
|
|
438
456
|
error: errorMessage,
|
|
439
457
|
executionTime
|
|
440
|
-
});
|
|
441
|
-
} finally {
|
|
442
|
-
abortControllerRef.current = null;
|
|
458
|
+
}));
|
|
443
459
|
}
|
|
444
460
|
})();
|
|
445
461
|
},
|
|
446
|
-
[
|
|
462
|
+
[]
|
|
447
463
|
);
|
|
448
|
-
|
|
449
|
-
if (
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
...prev,
|
|
453
|
-
isExecuting: false,
|
|
454
|
-
error: "Command cancelled"
|
|
455
|
-
}));
|
|
464
|
+
useEffect5(() => {
|
|
465
|
+
if (client && pendingRef.current) {
|
|
466
|
+
const { statements, params, schemas } = pendingRef.current;
|
|
467
|
+
command(statements, params, schemas);
|
|
456
468
|
}
|
|
469
|
+
}, [client, command]);
|
|
470
|
+
const cancelCommand = useCallback2(() => {
|
|
471
|
+
executionIdRef.current++;
|
|
472
|
+
setState((prev) => ({
|
|
473
|
+
...prev,
|
|
474
|
+
isExecuting: false,
|
|
475
|
+
error: "Command cancelled"
|
|
476
|
+
}));
|
|
457
477
|
}, []);
|
|
458
478
|
return {
|
|
459
|
-
// State
|
|
460
479
|
isExecuting: state.isExecuting,
|
|
461
480
|
results: state.results,
|
|
462
481
|
error: state.error,
|
|
463
482
|
executionTime: state.executionTime,
|
|
464
|
-
// Actions
|
|
465
483
|
command,
|
|
466
484
|
cancelCommand
|
|
467
485
|
};
|
|
@@ -508,29 +526,33 @@ function useAdminExecutor(options) {
|
|
|
508
526
|
error: void 0,
|
|
509
527
|
executionTime: void 0
|
|
510
528
|
});
|
|
511
|
-
const
|
|
512
|
-
|
|
529
|
+
const clientRef = useRef4(client);
|
|
530
|
+
clientRef.current = client;
|
|
531
|
+
const isMountedRef = useRef4(false);
|
|
513
532
|
useEffect7(() => {
|
|
533
|
+
isMountedRef.current = true;
|
|
514
534
|
return () => {
|
|
515
535
|
isMountedRef.current = false;
|
|
516
536
|
};
|
|
517
537
|
}, []);
|
|
538
|
+
const executionIdRef = useRef4(0);
|
|
539
|
+
const pendingRef = useRef4(null);
|
|
518
540
|
const admin = useCallback3(
|
|
519
541
|
(statements, params, schemas) => {
|
|
520
|
-
|
|
521
|
-
|
|
542
|
+
const currentClient = clientRef.current;
|
|
543
|
+
if (!currentClient) {
|
|
544
|
+
pendingRef.current = { statements, params, schemas };
|
|
545
|
+
setState((prev) => ({ ...prev, isExecuting: true, error: void 0 }));
|
|
546
|
+
return Promise.resolve();
|
|
522
547
|
}
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
results: void 0,
|
|
527
|
-
error: void 0,
|
|
528
|
-
executionTime: void 0
|
|
529
|
-
});
|
|
548
|
+
pendingRef.current = null;
|
|
549
|
+
const thisExecution = ++executionIdRef.current;
|
|
550
|
+
setState((prev) => ({ ...prev, isExecuting: true, error: void 0 }));
|
|
530
551
|
const startTime = Date.now();
|
|
531
|
-
(async () => {
|
|
552
|
+
return (async () => {
|
|
532
553
|
try {
|
|
533
|
-
const frameResults = await
|
|
554
|
+
const frameResults = await currentClient.admin(statements, params || null, schemas || []) || [];
|
|
555
|
+
if (executionIdRef.current !== thisExecution) return;
|
|
534
556
|
const executionTime = Date.now() - startTime;
|
|
535
557
|
const results = frameResults.map((frame) => {
|
|
536
558
|
if (Array.isArray(frame) && frame.length > 0) {
|
|
@@ -544,15 +566,14 @@ function useAdminExecutor(options) {
|
|
|
544
566
|
return {
|
|
545
567
|
name: key,
|
|
546
568
|
type: dataType,
|
|
547
|
-
|
|
569
|
+
payload: []
|
|
548
570
|
};
|
|
549
571
|
});
|
|
550
572
|
} else {
|
|
551
573
|
columns = Object.keys(firstRow).map((key) => ({
|
|
552
574
|
name: key,
|
|
553
575
|
type: "Utf8",
|
|
554
|
-
|
|
555
|
-
data: []
|
|
576
|
+
payload: []
|
|
556
577
|
}));
|
|
557
578
|
}
|
|
558
579
|
return {
|
|
@@ -577,6 +598,7 @@ function useAdminExecutor(options) {
|
|
|
577
598
|
executionTime
|
|
578
599
|
});
|
|
579
600
|
} catch (err) {
|
|
601
|
+
if (executionIdRef.current !== thisExecution) return;
|
|
580
602
|
const executionTime = Date.now() - startTime;
|
|
581
603
|
let errorMessage = "Admin execution failed";
|
|
582
604
|
if (err instanceof Error) {
|
|
@@ -588,36 +610,37 @@ function useAdminExecutor(options) {
|
|
|
588
610
|
}
|
|
589
611
|
console.error("Admin execution failed:", errorMessage);
|
|
590
612
|
if (!isMountedRef.current) return;
|
|
591
|
-
setState({
|
|
613
|
+
setState((prev) => ({
|
|
614
|
+
...prev,
|
|
592
615
|
isExecuting: false,
|
|
593
|
-
results: void 0,
|
|
594
616
|
error: errorMessage,
|
|
595
617
|
executionTime
|
|
596
|
-
});
|
|
597
|
-
} finally {
|
|
598
|
-
abortControllerRef.current = null;
|
|
618
|
+
}));
|
|
599
619
|
}
|
|
600
620
|
})();
|
|
601
621
|
},
|
|
602
|
-
[
|
|
622
|
+
[]
|
|
623
|
+
// stable — never recreates
|
|
603
624
|
);
|
|
604
|
-
|
|
605
|
-
if (
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
...prev,
|
|
609
|
-
isExecuting: false,
|
|
610
|
-
error: "Admin cancelled"
|
|
611
|
-
}));
|
|
625
|
+
useEffect7(() => {
|
|
626
|
+
if (client && pendingRef.current) {
|
|
627
|
+
const { statements, params, schemas } = pendingRef.current;
|
|
628
|
+
admin(statements, params, schemas);
|
|
612
629
|
}
|
|
630
|
+
}, [client, admin]);
|
|
631
|
+
const cancelAdmin = useCallback3(() => {
|
|
632
|
+
executionIdRef.current++;
|
|
633
|
+
setState((prev) => ({
|
|
634
|
+
...prev,
|
|
635
|
+
isExecuting: false,
|
|
636
|
+
error: "Admin cancelled"
|
|
637
|
+
}));
|
|
613
638
|
}, []);
|
|
614
639
|
return {
|
|
615
|
-
// State
|
|
616
640
|
isExecuting: state.isExecuting,
|
|
617
641
|
results: state.results,
|
|
618
642
|
error: state.error,
|
|
619
643
|
executionTime: state.executionTime,
|
|
620
|
-
// Actions
|
|
621
644
|
admin,
|
|
622
645
|
cancelAdmin
|
|
623
646
|
};
|
|
@@ -704,6 +727,10 @@ function useSubscriptionExecutor(options) {
|
|
|
704
727
|
setState((prev) => ({ ...prev, error: "Client not connected" }));
|
|
705
728
|
return;
|
|
706
729
|
}
|
|
730
|
+
if (!("subscribe" in currentClient)) {
|
|
731
|
+
setState((prev) => ({ ...prev, error: "Subscriptions require a WebSocket connection" }));
|
|
732
|
+
return;
|
|
733
|
+
}
|
|
707
734
|
queryRef.current = query;
|
|
708
735
|
paramsRef.current = params;
|
|
709
736
|
schemaRef.current = schema;
|
|
@@ -736,6 +763,7 @@ function useSubscriptionExecutor(options) {
|
|
|
736
763
|
const unsubscribe = useCallback4(async () => {
|
|
737
764
|
const currentClient = clientRef.current;
|
|
738
765
|
if (!currentClient || !subscriptionIdRef.current) return;
|
|
766
|
+
if (!("unsubscribe" in currentClient)) return;
|
|
739
767
|
try {
|
|
740
768
|
await currentClient.unsubscribe(subscriptionIdRef.current);
|
|
741
769
|
subscriptionIdRef.current = void 0;
|
|
@@ -762,7 +790,7 @@ function useSubscriptionExecutor(options) {
|
|
|
762
790
|
}, []);
|
|
763
791
|
useEffect9(() => {
|
|
764
792
|
return () => {
|
|
765
|
-
if (subscriptionIdRef.current && clientRef.current) {
|
|
793
|
+
if (subscriptionIdRef.current && clientRef.current && "unsubscribe" in clientRef.current) {
|
|
766
794
|
clientRef.current.unsubscribe(subscriptionIdRef.current).catch(console.error);
|
|
767
795
|
}
|
|
768
796
|
};
|
|
@@ -966,6 +994,7 @@ export {
|
|
|
966
994
|
ConnectionContext,
|
|
967
995
|
ConnectionProvider,
|
|
968
996
|
DEFAULT_CONFIG,
|
|
997
|
+
DEFAULT_URL,
|
|
969
998
|
clearConnection,
|
|
970
999
|
getConnection,
|
|
971
1000
|
useAdminExecutor,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/connection/connection.ts","../src/connection/connection-pool.ts","../src/connection/connection-context.tsx","../src/hooks/use-connection.ts","../src/hooks/use-query-executor.ts","../src/hooks/use-query.ts","../src/hooks/use-command-executor.ts","../src/hooks/use-command.ts","../src/hooks/use-admin-executor.ts","../src/hooks/use-admin.ts","../src/hooks/use-subscription-executor.ts","../src/hooks/use-subscription.ts","../src/hooks/use-schema.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nexport * from '@reifydb/core';\nexport * from '@reifydb/client';\n\n// Export connection utilities\nexport {Connection, type ConnectionConfig, DEFAULT_CONFIG} from './connection/connection';\nexport {getConnection, clearConnection} from './connection/connection-pool';\nexport {ConnectionProvider, ConnectionContext, type ConnectionProviderProps} from './connection/connection-context';\n\n// Export React hooks\nexport {useConnection} from './hooks/use-connection';\nexport {useQueryExecutor, type QueryResult, type QueryState, type QueryExecutorOptions} from './hooks/use-query-executor';\nexport {useQueryOne, useQueryMany, type QueryOptions} from './hooks/use-query';\nexport {useCommandExecutor, type CommandResult, type CommandState, type CommandExecutorOptions} from './hooks/use-command-executor';\nexport {useCommandOne, useCommandMany, type CommandOptions} from './hooks/use-command';\nexport {useAdminExecutor, type AdminResult, type AdminState, type AdminExecutorOptions} from './hooks/use-admin-executor';\nexport {useAdminOne, useAdminMany, type AdminOptions} from './hooks/use-admin';\nexport {\n useSubscriptionExecutor,\n type SubscriptionExecutorOptions,\n type SubscriptionState,\n type ChangeEvent\n} from './hooks/use-subscription-executor';\nexport {\n useSubscription,\n type SubscriptionOptions\n} from './hooks/use-subscription';\nexport {useSchema, type TableInfo, type ColumnInfo} from './hooks/use-schema';","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {Client, WsClient, type WsClientOptions} from '@reifydb/client';\n\ninterface ConnectionState {\n client: WsClient | null;\n isConnected: boolean;\n isConnecting: boolean;\n connectionError: string | null;\n listeners: Set<(state: ConnectionState) => void>;\n}\n\nexport interface ConnectionConfig {\n url?: string;\n options?: Omit<WsClientOptions, 'url'>;\n}\n\nexport const DEFAULT_CONFIG: ConnectionConfig = {\n url: 'ws://127.0.0.1:8090',\n options: {\n timeoutMs: 1000,\n }\n};\n\nexport class Connection {\n private state: ConnectionState = {\n client: null,\n isConnected: false,\n isConnecting: false,\n connectionError: null,\n listeners: new Set(),\n };\n private config: ConnectionConfig;\n\n constructor(config?: ConnectionConfig) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n\n setConfig(config: ConnectionConfig): void {\n this.config = {...DEFAULT_CONFIG, ...config};\n }\n\n getConfig(): ConnectionConfig {\n return this.config;\n }\n\n async connect(url?: string, options?: Omit<WsClientOptions, 'url'>): Promise<void> {\n // Don't connect if already connected or connecting\n if (this.state.isConnected || this.state.isConnecting) {\n return;\n }\n\n const connectUrl = url || this.config.url || DEFAULT_CONFIG.url!;\n const connectOptions = {...this.config.options, ...options};\n\n this.updateState({\n isConnecting: true,\n connectionError: null,\n });\n\n try {\n const client = await Client.connect_ws(connectUrl, connectOptions);\n\n this.updateState({\n client,\n isConnected: true,\n isConnecting: false,\n connectionError: null,\n });\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to connect to ReifyDB';\n console.error('[Connection] Connection failed:', errorMessage, err);\n this.updateState({\n client: null,\n isConnected: false,\n isConnecting: false,\n connectionError: errorMessage,\n });\n throw err;\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.state.client) {\n try {\n this.state.client.disconnect();\n // Small delay to ensure WebSocket closes cleanly\n await new Promise(resolve => setTimeout(resolve, 10));\n } catch (err) {\n console.error('Error disconnecting:', err);\n }\n }\n\n this.updateState({\n client: null,\n isConnected: false,\n isConnecting: false,\n connectionError: null,\n });\n }\n\n async reconnect(url?: string, options?: Omit<WsClientOptions, 'url'>): Promise<void> {\n await this.disconnect();\n await this.connect(url, options);\n }\n\n getClient(): WsClient | null {\n return this.state.client;\n }\n\n isConnected(): boolean {\n return this.state.isConnected;\n }\n\n isConnecting(): boolean {\n return this.state.isConnecting;\n }\n\n getConnectionError(): string | null {\n return this.state.connectionError;\n }\n\n getState(): Omit<ConnectionState, 'listeners'> {\n const {listeners, ...state} = this.state;\n return state;\n }\n\n // Subscribe to state changes\n subscribe(listener: (state: ConnectionState) => void): () => void {\n this.state.listeners.add(listener);\n // Return unsubscribe function\n return () => {\n this.state.listeners.delete(listener);\n };\n }\n\n private updateState(updates: Partial<ConnectionState>): void {\n this.state = {\n ...this.state,\n ...updates,\n };\n\n // Notify all listeners\n this.state.listeners.forEach(listener => {\n listener(this.state);\n });\n }\n}\n\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { Connection, ConnectionConfig, DEFAULT_CONFIG } from './connection';\n\n/**\n * Singleton default connection instance.\n * This ensures a single global connection that gets reused and updated.\n */\nlet defaultConnection: Connection | null = null;\n\n/**\n * Get the singleton connection instance.\n * If a config is provided, the connection's config will be updated via setConfig().\n * @param config - Optional connection configuration\n * @returns The singleton Connection instance\n */\nexport function getConnection(config?: ConnectionConfig): Connection {\n const effectiveConfig = config ? { ...DEFAULT_CONFIG, ...config } : DEFAULT_CONFIG;\n\n // Create singleton on first call\n if (!defaultConnection) {\n defaultConnection = new Connection(effectiveConfig);\n // Start connection immediately - don't wait for React's useEffect\n defaultConnection.connect().catch(err => {\n console.error('[ConnectionPool] Eager connect failed:', err);\n });\n } else {\n // Update config on existing connection if provided\n defaultConnection.setConfig(effectiveConfig);\n }\n\n return defaultConnection;\n}\n\n/**\n * Clear the singleton connection\n */\nexport async function clearConnection(): Promise<void> {\n if (defaultConnection) {\n await defaultConnection.disconnect();\n defaultConnection = null;\n }\n}","import React, { createContext, useEffect, useRef, ReactNode } from 'react';\nimport { Connection, ConnectionConfig } from './connection';\nimport { getConnection } from './connection-pool';\n\nexport const ConnectionContext = createContext<Connection | null>(null);\n\nexport interface ConnectionProviderProps {\n config?: ConnectionConfig;\n children: ReactNode;\n}\n\nexport function ConnectionProvider({ config, children }: ConnectionProviderProps) {\n // Get the singleton connection - this always returns the same instance\n // but updates its config via setConfig()\n const connection = getConnection(config);\n\n // Track previous config to detect changes\n const prevConfigRef = useRef<string | undefined>(undefined);\n const currentConfigStr = JSON.stringify(config);\n\n useEffect(() => {\n const configChanged = prevConfigRef.current !== undefined &&\n prevConfigRef.current !== currentConfigStr;\n\n if (configChanged && connection.isConnected()) {\n // Config changed while connected - reconnect with new config\n connection.reconnect().catch(err => {\n console.error('[ConnectionProvider] Failed to reconnect:', err);\n });\n } else if (!connection.isConnected() && !connection.isConnecting()) {\n // Auto-connect if not connected\n connection.connect().catch(err => {\n console.error('[ConnectionProvider] Failed to connect:', err);\n });\n }\n\n // Update previous config reference\n prevConfigRef.current = currentConfigStr;\n }, [currentConfigStr, connection]);\n\n return (\n <ConnectionContext.Provider value={connection}>\n {children}\n </ConnectionContext.Provider>\n );\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useContext, useEffect, useState} from 'react';\nimport {ConnectionConfig} from '../connection/connection';\nimport {getConnection} from '../connection/connection-pool';\nimport {ConnectionContext} from '../connection/connection-context';\nimport {WsClient} from '@reifydb/client';\n\ninterface ConnectionState {\n client: WsClient | null;\n isConnected: boolean;\n isConnecting: boolean;\n connectionError: string | null;\n}\n\nexport function useConnection(overrideConfig?: ConnectionConfig) {\n const contextConnection = useContext(ConnectionContext);\n\n // Use override config if provided, otherwise use context, otherwise get default\n const [connection] = useState(() => {\n if (overrideConfig) {\n return getConnection(overrideConfig);\n }\n return contextConnection || getConnection();\n });\n\n const [state, setState] = useState<ConnectionState>(() => connection.getState());\n\n useEffect(() => {\n // Get initial state immediately\n const currentState = connection.getState();\n setState(currentState);\n\n // Subscribe to connection state changes\n const unsubscribe = connection.subscribe((newState) => {\n setState({\n client: newState.client,\n isConnected: newState.isConnected,\n isConnecting: newState.isConnecting,\n connectionError: newState.connectionError,\n });\n });\n\n // No auto-connect - ConnectionProvider handles all auto-connection\n // Users must either wrap with ConnectionProvider or manually call connect()\n\n return unsubscribe;\n }, [connection]);\n\n return {\n ...state,\n connect: () => connection.connect(),\n disconnect: () => connection.disconnect(),\n reconnect: () => connection.reconnect(),\n };\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, SchemaNode} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useConnection} from './use-connection';\n\nexport interface QueryResult<T = any> {\n columns: Column[];\n rows: T[];\n executionTimeMs: number;\n rowsAffected?: number;\n}\n\nexport interface QueryState<T = any> {\n isExecuting: boolean;\n results: QueryResult<T>[] | undefined;\n error: string | undefined;\n executionTime: number | undefined;\n}\n\nexport interface QueryExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\nexport function useQueryExecutor<T = any>(options?: QueryExecutorOptions) {\n const {client} = useConnection(options?.connectionConfig);\n\n const [state, setState] = useState<QueryState<T>>({\n isExecuting: false,\n results: undefined,\n error: undefined,\n executionTime: undefined,\n });\n\n const abortControllerRef = useRef<AbortController | null>(null);\n const isMountedRef = useRef(true);\n useEffect(() => {\n return () => { isMountedRef.current = false; };\n }, []);\n\n const query = useCallback(\n (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]): void => {\n // Cancel any ongoing query for THIS instance only\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n setState({\n isExecuting: true,\n results: undefined,\n error: undefined,\n executionTime: undefined,\n });\n\n const startTime = Date.now();\n\n (async () => {\n try {\n // Call client.query which returns FrameResults (array of frames)\n const frameResults = await client?.query(statements, params || null, schemas || []) || [];\n\n const executionTime = Date.now() - startTime;\n \n // Process each frame into a QueryResult\n const results: QueryResult<T>[] = frameResults.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const firstRow = frame[0];\n let columns: Column[] = [];\n \n // Check if we have Value objects or plain objects\n const hasValueObjects = firstRow && typeof firstRow === 'object' && \n Object.values(firstRow).some(v => v && typeof v === 'object' && 'type' in v);\n \n if (hasValueObjects) {\n // We have Value objects - extract type info\n columns = Object.keys(firstRow).map((key) => {\n const value = firstRow[key];\n const dataType = value?.type || 'Utf8';\n return {\n name: key,\n type: dataType,\n data: [],\n };\n });\n } else {\n // Plain objects from schema conversion\n columns = Object.keys(firstRow).map((key) => ({\n name: key,\n type: 'Utf8', // Default type for plain objects\n data: [],\n }));\n }\n \n return {\n columns,\n rows: frame as T[],\n executionTimeMs: executionTime,\n };\n } else {\n // Empty result\n return {\n columns: [],\n rows: [],\n executionTimeMs: executionTime,\n };\n }\n });\n\n if (!isMountedRef.current) return;\n setState({\n isExecuting: false,\n results,\n error: undefined,\n executionTime,\n });\n } catch (err) {\n const executionTime = Date.now() - startTime;\n let errorMessage = 'Query execution failed';\n\n if (err instanceof Error) {\n errorMessage = err.message;\n } else if (typeof err === 'string') {\n errorMessage = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n errorMessage = (err as { message: string }).message;\n }\n\n console.error('Query execution failed:', errorMessage);\n\n if (!isMountedRef.current) return;\n setState({\n isExecuting: false,\n results: undefined,\n error: errorMessage,\n executionTime,\n });\n } finally {\n abortControllerRef.current = null;\n }\n })();\n },\n [client]\n );\n\n const cancelQuery = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n setState((prev) => ({\n ...prev,\n isExecuting: false,\n error: 'Query cancelled',\n }));\n }\n }, []);\n\n return {\n // State\n isExecuting: state.isExecuting,\n results: state.results,\n error: state.error,\n executionTime: state.executionTime,\n\n // Actions\n query,\n cancelQuery,\n };\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {SchemaNode, InferSchema} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useQueryExecutor, type QueryResult, type QueryExecutorOptions} from './use-query-executor';\n\nexport interface QueryOptions extends QueryExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\n// Single query hook - returns a single result\nexport function useQueryOne<S extends SchemaNode = any>(\n rql: string,\n params?: any,\n schema?: S,\n options?: QueryOptions\n): {\n isExecuting: boolean;\n result: QueryResult<S extends SchemaNode ? InferSchema<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n query\n } = useQueryExecutor<S extends SchemaNode ? InferSchema<S> : any>(options);\n\n useEffect(() => {\n // Pass schema as array for the executor\n const schemas = schema ? [schema] : undefined;\n query(rql, params, schemas);\n }, [rql, params, query]);\n\n // Extract first result for single query convenience\n const result = useMemo(() => {\n return results && results.length > 0 ? results[0] : undefined;\n }, [results]);\n\n return {isExecuting, result, error};\n}\n\n// Multiple query hook - returns multiple results\nexport function useQueryMany<S extends readonly SchemaNode[] = readonly SchemaNode[]>(\n statements: string | string[],\n params?: any,\n schemas?: S,\n options?: QueryOptions\n): {\n isExecuting: boolean;\n results: QueryResult<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n query\n } = useQueryExecutor<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>(options);\n\n useEffect(() => {\n query(statements, params, schemas);\n }, [statements, params, query]);\n\n return {isExecuting, results, error};\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, SchemaNode} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useConnection} from './use-connection';\n\nexport interface CommandResult<T = any> {\n columns: Column[];\n rows: T[];\n executionTimeMs: number;\n rowsAffected?: number;\n}\n\nexport interface CommandState<T = any> {\n isExecuting: boolean;\n results: CommandResult<T>[] | undefined;\n error: string | undefined;\n executionTime: number | undefined;\n}\n\nexport interface CommandExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\nexport function useCommandExecutor<T = any>(options?: CommandExecutorOptions) {\n const {client} = useConnection(options?.connectionConfig);\n\n const [state, setState] = useState<CommandState<T>>({\n isExecuting: false,\n results: undefined,\n error: undefined,\n executionTime: undefined,\n });\n\n const abortControllerRef = useRef<AbortController | null>(null);\n const isMountedRef = useRef(true);\n useEffect(() => {\n return () => { isMountedRef.current = false; };\n }, []);\n\n const command = useCallback(\n (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]): void => {\n // Cancel any ongoing command for THIS instance only\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n setState({\n isExecuting: true,\n results: undefined,\n error: undefined,\n executionTime: undefined,\n });\n\n const startTime = Date.now();\n\n (async () => {\n try {\n // Call client.command which returns FrameResults (array of frames)\n // Commands and queries both use the same command method\n const frameResults = await client?.command(statements, params || null, schemas || []) || [];\n\n const executionTime = Date.now() - startTime;\n \n // Process each frame into a CommandResult\n const results: CommandResult<T>[] = frameResults.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const firstRow = frame[0];\n let columns: Column[] = [];\n \n // Check if we have Value objects or plain objects\n const hasValueObjects = firstRow && typeof firstRow === 'object' && \n Object.values(firstRow).some(v => v && typeof v === 'object' && 'type' in v);\n \n if (hasValueObjects) {\n // We have Value objects - extract type info\n columns = Object.keys(firstRow).map((key) => {\n const value = firstRow[key];\n const dataType = value?.type || 'Utf8';\n return {\n name: key,\n type: dataType,\n data: [],\n };\n });\n } else {\n // Plain objects from schema conversion\n columns = Object.keys(firstRow).map((key) => ({\n name: key,\n type: 'Utf8', // Default type for plain objects\n data: [],\n }));\n }\n \n return {\n columns,\n rows: frame as T[],\n executionTimeMs: executionTime,\n };\n } else {\n // Empty result or rows affected\n return {\n columns: [],\n rows: [],\n executionTimeMs: executionTime,\n rowsAffected: typeof frame === 'number' ? frame : undefined,\n };\n }\n });\n\n if (!isMountedRef.current) return;\n setState({\n isExecuting: false,\n results,\n error: undefined,\n executionTime,\n });\n } catch (err) {\n const executionTime = Date.now() - startTime;\n let errorMessage = 'Command execution failed';\n\n if (err instanceof Error) {\n errorMessage = err.message;\n } else if (typeof err === 'string') {\n errorMessage = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n errorMessage = (err as { message: string }).message;\n }\n\n console.error('Command execution failed:', errorMessage);\n\n if (!isMountedRef.current) return;\n setState({\n isExecuting: false,\n results: undefined,\n error: errorMessage,\n executionTime,\n });\n } finally {\n abortControllerRef.current = null;\n }\n })();\n },\n [client]\n );\n\n const cancelCommand = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n setState((prev) => ({\n ...prev,\n isExecuting: false,\n error: 'Command cancelled',\n }));\n }\n }, []);\n\n return {\n // State\n isExecuting: state.isExecuting,\n results: state.results,\n error: state.error,\n executionTime: state.executionTime,\n\n // Actions\n command,\n cancelCommand,\n };\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {SchemaNode, InferSchema} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useCommandExecutor, type CommandResult, type CommandExecutorOptions} from './use-command-executor';\n\nexport interface CommandOptions extends CommandExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\n// Single command hook - returns a single result\nexport function useCommandOne<S extends SchemaNode = any>(\n statement: string,\n params?: any,\n schema?: S,\n options?: CommandOptions\n): {\n isExecuting: boolean;\n result: CommandResult<S extends SchemaNode ? InferSchema<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n command\n } = useCommandExecutor<S extends SchemaNode ? InferSchema<S> : any>(options);\n\n useEffect(() => {\n // Pass schema as array for the executor\n const schemas = schema ? [schema] : undefined;\n command(statement, params, schemas);\n }, [statement, params, command]);\n\n // Extract first result for single command convenience\n const result = useMemo(() => {\n return results && results.length > 0 ? results[0] : undefined;\n }, [results]);\n\n return {isExecuting, result, error};\n}\n\n// Multiple command hook - returns multiple results\nexport function useCommandMany<S extends readonly SchemaNode[] = readonly SchemaNode[]>(\n statements: string | string[],\n params?: any,\n schemas?: S,\n options?: CommandOptions\n): {\n isExecuting: boolean;\n results: CommandResult<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n command\n } = useCommandExecutor<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>(options);\n\n useEffect(() => {\n command(statements, params, schemas);\n }, [statements, params, command]);\n\n return {isExecuting, results, error};\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, SchemaNode} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useConnection} from './use-connection';\n\nexport interface AdminResult<T = any> {\n columns: Column[];\n rows: T[];\n executionTimeMs: number;\n rowsAffected?: number;\n}\n\nexport interface AdminState<T = any> {\n isExecuting: boolean;\n results: AdminResult<T>[] | undefined;\n error: string | undefined;\n executionTime: number | undefined;\n}\n\nexport interface AdminExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\nexport function useAdminExecutor<T = any>(options?: AdminExecutorOptions) {\n const {client} = useConnection(options?.connectionConfig);\n\n const [state, setState] = useState<AdminState<T>>({\n isExecuting: false,\n results: undefined,\n error: undefined,\n executionTime: undefined,\n });\n\n const abortControllerRef = useRef<AbortController | null>(null);\n const isMountedRef = useRef(true);\n useEffect(() => {\n return () => { isMountedRef.current = false; };\n }, []);\n\n const admin = useCallback(\n (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]): void => {\n // Cancel any ongoing admin for THIS instance only\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n setState({\n isExecuting: true,\n results: undefined,\n error: undefined,\n executionTime: undefined,\n });\n\n const startTime = Date.now();\n\n (async () => {\n try {\n // Call client.admin which returns FrameResults (array of frames)\n // Commands and queries both use the same admin method\n const frameResults = await client?.admin(statements, params || null, schemas || []) || [];\n\n const executionTime = Date.now() - startTime;\n\n // Process each frame into a AdminResult\n const results: AdminResult<T>[] = frameResults.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const firstRow = frame[0];\n let columns: Column[] = [];\n\n // Check if we have Value objects or plain objects\n const hasValueObjects = firstRow && typeof firstRow === 'object' &&\n Object.values(firstRow).some(v => v && typeof v === 'object' && 'type' in v);\n\n if (hasValueObjects) {\n // We have Value objects - extract type info\n columns = Object.keys(firstRow).map((key) => {\n const value = firstRow[key];\n const dataType = value?.type || 'Utf8';\n return {\n name: key,\n type: dataType,\n data: [],\n };\n });\n } else {\n // Plain objects from schema conversion\n columns = Object.keys(firstRow).map((key) => ({\n name: key,\n type: 'Utf8', // Default type for plain objects\n data: [],\n }));\n }\n\n return {\n columns,\n rows: frame as T[],\n executionTimeMs: executionTime,\n };\n } else {\n // Empty result or rows affected\n return {\n columns: [],\n rows: [],\n executionTimeMs: executionTime,\n rowsAffected: typeof frame === 'number' ? frame : undefined,\n };\n }\n });\n\n if (!isMountedRef.current) return;\n setState({\n isExecuting: false,\n results,\n error: undefined,\n executionTime,\n });\n } catch (err) {\n const executionTime = Date.now() - startTime;\n let errorMessage = 'Admin execution failed';\n\n if (err instanceof Error) {\n errorMessage = err.message;\n } else if (typeof err === 'string') {\n errorMessage = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n errorMessage = (err as { message: string }).message;\n }\n\n console.error('Admin execution failed:', errorMessage);\n\n if (!isMountedRef.current) return;\n setState({\n isExecuting: false,\n results: undefined,\n error: errorMessage,\n executionTime,\n });\n } finally {\n abortControllerRef.current = null;\n }\n })();\n },\n [client]\n );\n\n const cancelAdmin = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n setState((prev) => ({\n ...prev,\n isExecuting: false,\n error: 'Admin cancelled',\n }));\n }\n }, []);\n\n return {\n // State\n isExecuting: state.isExecuting,\n results: state.results,\n error: state.error,\n executionTime: state.executionTime,\n\n // Actions\n admin,\n cancelAdmin,\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {SchemaNode, InferSchema} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useAdminExecutor, type AdminResult, type AdminExecutorOptions} from './use-admin-executor';\n\nexport interface AdminOptions extends AdminExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\n// Single admin hook - returns a single result\nexport function useAdminOne<S extends SchemaNode = any>(\n statement: string,\n params?: any,\n schema?: S,\n options?: AdminOptions\n): {\n isExecuting: boolean;\n result: AdminResult<S extends SchemaNode ? InferSchema<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n admin\n } = useAdminExecutor<S extends SchemaNode ? InferSchema<S> : any>(options);\n\n useEffect(() => {\n // Pass schema as array for the executor\n const schemas = schema ? [schema] : undefined;\n admin(statement, params, schemas);\n }, [statement, params, admin]);\n\n // Extract first result for single admin convenience\n const result = useMemo(() => {\n return results && results.length > 0 ? results[0] : undefined;\n }, [results]);\n\n return {isExecuting, result, error};\n}\n\n// Multiple admin hook - returns multiple results\nexport function useAdminMany<S extends readonly SchemaNode[] = readonly SchemaNode[]>(\n statements: string | string[],\n params?: any,\n schemas?: S,\n options?: AdminOptions\n): {\n isExecuting: boolean;\n results: AdminResult<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n admin\n } = useAdminExecutor<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>(options);\n\n useEffect(() => {\n admin(statements, params, schemas);\n }, [statements, params, admin]);\n\n return {isExecuting, results, error};\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { SchemaNode } from '@reifydb/core';\nimport { useConnection } from './use-connection';\nimport type { ConnectionConfig } from '../connection/connection';\n\nexport interface SubscriptionExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\nexport interface ChangeEvent<T> {\n operation: 'INSERT' | 'UPDATE' | 'REMOVE';\n rows: T[];\n timestamp: number;\n}\n\nexport interface SubscriptionState<T> {\n data: T[];\n changes: ChangeEvent<T>[];\n isSubscribed: boolean;\n isSubscribing: boolean;\n error: string | undefined;\n subscriptionId: string | undefined;\n}\n\nexport function useSubscriptionExecutor<T = any>(\n options?: SubscriptionExecutorOptions\n) {\n const { client } = useConnection(options?.connectionConfig);\n\n const [state, setState] = useState<SubscriptionState<T>>({\n data: [],\n changes: [],\n isSubscribed: false,\n isSubscribing: false,\n error: undefined,\n subscriptionId: undefined\n });\n\n // Use a ref for client to avoid recreating callbacks when client changes\n const clientRef = useRef(client);\n\n const subscriptionIdRef = useRef<string | undefined>(undefined);\n const queryRef = useRef<string | undefined>(undefined);\n const paramsRef = useRef<any>(undefined);\n const schemaRef = useRef<SchemaNode | undefined>(undefined);\n\n // Keep clientRef in sync with client\n useEffect(() => {\n clientRef.current = client;\n }, [client]);\n\n // Helper to add change event\n const addChangeEvent = useCallback((\n operation: 'INSERT' | 'UPDATE' | 'REMOVE',\n rows: T[]\n ) => {\n setState(prev => {\n const newChange: ChangeEvent<T> = {\n operation,\n rows,\n timestamp: Date.now()\n };\n\n const newChanges = [...prev.changes, newChange];\n\n return {\n ...prev,\n data: prev.data,\n changes: newChanges\n };\n });\n }, []);\n\n // Separate callbacks for each operation type\n const handleInsert = useCallback((rows: T[]) => {\n addChangeEvent('INSERT', rows);\n }, [addChangeEvent]);\n\n const handleUpdate = useCallback((rows: T[]) => {\n addChangeEvent('UPDATE', rows);\n }, [addChangeEvent]);\n\n const handleRemove = useCallback((rows: T[]) => {\n addChangeEvent('REMOVE', rows);\n }, [addChangeEvent]);\n\n const subscribe = useCallback(async (\n query: string,\n params?: any,\n schema?: SchemaNode\n ) => {\n const currentClient = clientRef.current;\n if (!currentClient) {\n setState(prev => ({ ...prev, error: 'Client not connected' }));\n return;\n }\n\n // Store refs for reconnection\n queryRef.current = query;\n paramsRef.current = params;\n schemaRef.current = schema;\n\n setState(prev => ({\n ...prev,\n isSubscribing: true,\n error: undefined\n }));\n\n try {\n const subId = await currentClient.subscribe(query, params, schema, {\n onInsert: handleInsert,\n onUpdate: handleUpdate,\n onRemove: handleRemove\n });\n\n subscriptionIdRef.current = subId;\n setState(prev => ({\n ...prev,\n isSubscribing: false,\n isSubscribed: true,\n subscriptionId: subId\n }));\n } catch (err: any) {\n setState(prev => ({\n ...prev,\n isSubscribing: false,\n error: err.message || 'Subscription failed'\n }));\n }\n }, [handleInsert, handleUpdate, handleRemove]);\n\n const unsubscribe = useCallback(async () => {\n const currentClient = clientRef.current;\n if (!currentClient || !subscriptionIdRef.current) return;\n\n try {\n await currentClient.unsubscribe(subscriptionIdRef.current);\n subscriptionIdRef.current = undefined;\n queryRef.current = undefined;\n paramsRef.current = undefined;\n schemaRef.current = undefined;\n\n setState(prev => ({\n ...prev,\n isSubscribed: false,\n subscriptionId: undefined\n }));\n } catch (err: any) {\n setState(prev => ({\n ...prev,\n error: err.message || 'Unsubscribe failed'\n }));\n }\n }, []);\n\n const clearChanges = useCallback(() => {\n setState(prev => ({ ...prev, changes: [] }));\n }, []);\n\n const clearData = useCallback(() => {\n setState(prev => ({ ...prev, data: [] }));\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (subscriptionIdRef.current && clientRef.current) {\n clientRef.current.unsubscribe(subscriptionIdRef.current).catch(console.error);\n }\n };\n }, []);\n\n return {\n state,\n subscribe,\n unsubscribe,\n clearChanges,\n clearData\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useEffect, useMemo } from 'react';\nimport { SchemaNode, InferSchema } from '@reifydb/core';\nimport {\n useSubscriptionExecutor,\n type SubscriptionExecutorOptions,\n type ChangeEvent\n} from './use-subscription-executor';\n\nexport interface SubscriptionOptions extends SubscriptionExecutorOptions {\n enabled?: boolean; // Auto-subscribe (default: true)\n}\n\nexport function useSubscription<S extends SchemaNode = any>(\n query: string,\n params?: any,\n schema?: S,\n options?: SubscriptionOptions\n): {\n data: InferSchema<S>[];\n changes: ChangeEvent<InferSchema<S>>[];\n isSubscribed: boolean;\n isSubscribing: boolean;\n error: string | undefined;\n subscriptionId: string | undefined;\n} {\n const {\n state,\n subscribe,\n unsubscribe\n } = useSubscriptionExecutor<InferSchema<S>>(options);\n\n // Serialize params for stable comparison (objects create new refs each render)\n const paramsKey = useMemo(() => JSON.stringify(params), [params]);\n\n useEffect(() => {\n if (options?.enabled === false) return;\n\n subscribe(query, params, schema);\n\n return () => {\n unsubscribe();\n };\n }, [query, paramsKey, schema, options?.enabled, subscribe, unsubscribe]);\n\n return {\n data: state.data,\n changes: state.changes,\n isSubscribed: state.isSubscribed,\n isSubscribing: state.isSubscribing,\n error: state.error,\n subscriptionId: state.subscriptionId\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useState} from 'react';\nimport {Schema, InferSchema} from '@reifydb/core';\nimport {useQueryExecutor} from './use-query-executor';\n\nexport interface ColumnInfo {\n name: string;\n dataType: string;\n}\n\nexport interface TableInfo {\n name: string;\n columns: ColumnInfo[];\n}\n\nconst namespaceSchema = Schema.object({\n id: Schema.number(),\n name: Schema.string(),\n});\n\nconst tableSchema = Schema.object({\n id: Schema.number(),\n namespace_id: Schema.number(),\n name: Schema.string(),\n primary_key_id: Schema.number(),\n});\n\nconst viewSchema = Schema.object({\n id: Schema.number(),\n namespace_id: Schema.number(),\n name: Schema.string(),\n});\n\nconst columnSchema = Schema.object({\n id: Schema.number(),\n source_id: Schema.number(),\n source_type: Schema.number(),\n name: Schema.string(),\n type: Schema.number(),\n position: Schema.number(),\n auto_increment: Schema.boolean(),\n});\n\ntype NamespaceRow = InferSchema<typeof namespaceSchema>;\ntype TableRow = InferSchema<typeof tableSchema>;\ntype ViewRow = InferSchema<typeof viewSchema>;\ntype ColumnRow = InferSchema<typeof columnSchema>;\n\nexport function useSchema(): [boolean, TableInfo[], string | undefined] {\n const {isExecuting, results, error, query} = useQueryExecutor();\n const [schema, setSchema] = useState<TableInfo[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (!query) return;\n\n const fetchSchema = async () => {\n setIsLoading(true);\n\n try {\n await query(\n `OUTPUT FROM system::namespaces; OUTPUT FROM system::tables; OUTPUT FROM system::views; FROM system::columns;`,\n undefined,\n [namespaceSchema, tableSchema, viewSchema, columnSchema]\n );\n } catch (err) {\n console.error('Failed to fetch schema:', err);\n }\n };\n\n fetchSchema();\n }, [query]);\n\n useEffect(() => {\n if (!results || results.length < 4) {\n setIsLoading(isExecuting);\n return;\n }\n\n const tablesResult = results[1];\n const viewsResult = results[2];\n const columnsResult = results[3];\n\n if (!tablesResult?.rows || !viewsResult?.rows || !columnsResult?.rows) {\n setIsLoading(false);\n return;\n }\n\n const namespacesResult = results[0];\n const namespaces = namespacesResult.rows as unknown as NamespaceRow[];\n const tables = tablesResult.rows as unknown as TableRow[];\n const views = viewsResult.rows as unknown as ViewRow[];\n const columns = columnsResult.rows as unknown as ColumnRow[];\n\n const namespaceMap = new Map<number, string>();\n namespaces.forEach((ns) => {\n const id = ns.id?.valueOf() as number;\n const name = ns.name?.valueOf() as string;\n if (id !== undefined && name) {\n namespaceMap.set(id, name);\n }\n });\n\n const tableInfoMap = new Map<number, TableInfo>();\n\n tables.forEach((table) => {\n const tableId = table.id?.valueOf() as number;\n const namespaceId = table.namespace_id?.valueOf() as number;\n const tableName = table.name?.valueOf() as string;\n\n if (tableId === undefined || !tableName || namespaceId === undefined) return;\n\n const namespace = namespaceMap.get(namespaceId);\n if (!namespace) return;\n\n const fullTableName = `${namespace}::${tableName}`;\n\n tableInfoMap.set(tableId, {\n name: fullTableName,\n columns: [],\n });\n });\n\n views.forEach((view) => {\n const viewId = view.id?.valueOf() as number;\n const namespaceId = view.namespace_id?.valueOf() as number;\n const viewName = view.name?.valueOf() as string;\n\n if (viewId === undefined || !viewName || namespaceId === undefined) return;\n\n const namespace = namespaceMap.get(namespaceId);\n if (!namespace) return;\n\n const fullViewName = `${namespace}::${viewName}`;\n\n tableInfoMap.set(viewId, {\n name: fullViewName,\n columns: [],\n });\n });\n\n const typeMap: Record<number, string> = {\n 0: 'None',\n 1: 'Float4',\n 2: 'Float8',\n 3: 'Int1',\n 4: 'Int2',\n 5: 'Int4',\n 6: 'Int8',\n 7: 'Int16',\n 8: 'Utf8',\n 9: 'Uint1',\n 10: 'Uint2',\n 11: 'Uint4',\n 12: 'Uint8',\n 13: 'Uint16',\n 14: 'Boolean',\n 15: 'Date',\n 16: 'DateTime',\n 17: 'Time',\n 18: 'Duration',\n 19: 'IdentityId',\n 20: 'Uuid4',\n 21: 'Uuid7',\n 22: 'Blob',\n 23: 'Int',\n 24: 'Decimal',\n 25: 'Uint',\n 26: 'Any',\n };\n\n // Create a map to collect columns with their positions\n const tableColumnsMap = new Map<number, Array<{name: string; dataType: string; position: number}>>();\n\n columns.forEach((column) => {\n const sourceId = column.source_id?.valueOf() as number;\n const sourceType = column.source_type?.valueOf() as number;\n const columnName = column.name?.valueOf() as string;\n const typeId = column.type?.valueOf() as number;\n const position = column.position?.valueOf() as number;\n\n if (sourceId === undefined || !columnName || typeId === undefined) return;\n if (sourceType !== 0 && sourceType !== 1) return;\n\n if (!tableColumnsMap.has(sourceId)) {\n tableColumnsMap.set(sourceId, []);\n }\n\n tableColumnsMap.get(sourceId)!.push({\n name: columnName,\n dataType: typeMap[typeId] || `Unknown(${typeId})`,\n position: position ?? 0,\n });\n });\n\n // Sort columns by position and add to table info\n tableColumnsMap.forEach((cols, sourceId) => {\n const tableInfo = tableInfoMap.get(sourceId);\n if (tableInfo) {\n cols.sort((a, b) => a.position - b.position);\n tableInfo.columns = cols.map((c) => ({name: c.name, dataType: c.dataType}));\n }\n });\n\n const schemaArray = Array.from(tableInfoMap.values())\n .filter((table) => table.name !== 'reifydb::flows')\n .sort((a, b) => a.name.localeCompare(b.name));\n\n setSchema(schemaArray);\n setIsLoading(false);\n }, [results, isExecuting]);\n\n return [isLoading, schema, error];\n}\n"],"mappings":"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","names":["useEffect","useEffect","useState","useRef","useEffect","useState","useRef","useEffect","useEffect","useEffect","useState","useCallback","useRef","useEffect","useState","useRef","useEffect","useCallback","useEffect","useMemo","useEffect","useMemo","useState","useCallback","useRef","useEffect","useState","useRef","useEffect","useCallback","useEffect","useMemo","useEffect","useMemo","useState","useCallback","useRef","useEffect","useState","useRef","useEffect","useCallback","useEffect","useMemo","useMemo","useEffect","useEffect","useState","useState","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/connection/connection.ts","../src/connection/connection-pool.ts","../src/connection/connection-context.tsx","../src/hooks/use-connection.ts","../src/hooks/use-query-executor.ts","../src/hooks/use-query.ts","../src/hooks/use-command-executor.ts","../src/hooks/use-command.ts","../src/hooks/use-admin-executor.ts","../src/hooks/use-admin.ts","../src/hooks/use-subscription-executor.ts","../src/hooks/use-subscription.ts","../src/hooks/use-schema.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nexport * from '@reifydb/core';\nexport * from '@reifydb/client';\n\n// Export connection utilities\nexport {Connection, type ConnectionConfig, DEFAULT_CONFIG, DEFAULT_URL} from './connection/connection';\nexport {getConnection, clearConnection} from './connection/connection-pool';\nexport {ConnectionProvider, ConnectionContext, type ConnectionProviderProps} from './connection/connection-context';\n\n// Export React hooks\nexport {useConnection} from './hooks/use-connection';\nexport {useQueryExecutor, type QueryResult, type QueryState, type QueryExecutorOptions} from './hooks/use-query-executor';\nexport {useQueryOne, useQueryMany, type QueryOptions} from './hooks/use-query';\nexport {useCommandExecutor, type CommandResult, type CommandState, type CommandExecutorOptions} from './hooks/use-command-executor';\nexport {useCommandOne, useCommandMany, type CommandOptions} from './hooks/use-command';\nexport {useAdminExecutor, type AdminResult, type AdminState, type AdminExecutorOptions} from './hooks/use-admin-executor';\nexport {useAdminOne, useAdminMany, type AdminOptions} from './hooks/use-admin';\nexport {\n useSubscriptionExecutor,\n type SubscriptionExecutorOptions,\n type SubscriptionState,\n type ChangeEvent\n} from './hooks/use-subscription-executor';\nexport {\n useSubscription,\n type SubscriptionOptions\n} from './hooks/use-subscription';\nexport {useSchema, type TableInfo, type ColumnInfo} from './hooks/use-schema';","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {Client, WsClient, HttpClient, JsonHttpClient, JsonWebsocketClient, type WsClientOptions} from '@reifydb/client';\n\ninterface ConnectionState {\n client: WsClient | HttpClient | JsonHttpClient | JsonWebsocketClient | null;\n isConnected: boolean;\n isConnecting: boolean;\n connectionError: string | null;\n listeners: Set<(state: ConnectionState) => void>;\n}\n\nexport interface ConnectionConfig {\n url?: string;\n token?: string;\n format?: 'json';\n options?: Omit<WsClientOptions, 'url' | 'token'>;\n}\n\nexport const DEFAULT_CONFIG: ConnectionConfig = {\n url: 'ws://127.0.0.1:8090',\n options: {timeoutMs: 30_000},\n};\n\nexport const DEFAULT_URL = 'ws://127.0.0.1:8090';\n\nexport class Connection {\n private state: ConnectionState = {\n client: null,\n isConnected: false,\n isConnecting: false,\n connectionError: null,\n listeners: new Set(),\n };\n private config: ConnectionConfig;\n\n constructor(config: ConnectionConfig = DEFAULT_CONFIG) {\n this.config = {...DEFAULT_CONFIG, ...config};\n }\n\n setConfig(config: ConnectionConfig): void {\n this.config = config;\n }\n\n getConfig(): ConnectionConfig {\n return this.config;\n }\n\n async connect(url?: string, options?: Omit<WsClientOptions, 'url'>): Promise<void> {\n // Don't connect if already connected or connecting\n if (this.state.isConnected || this.state.isConnecting) {\n return;\n }\n\n const connectUrl = url || this.config.url || DEFAULT_CONFIG.url!;\n const connectOptions = {token: this.config.token, ...this.config.options, ...options};\n\n this.updateState({\n isConnecting: true,\n connectionError: null,\n });\n\n try {\n const isHttp = connectUrl.startsWith('http://') || connectUrl.startsWith('https://');\n const isJson = this.config.format === 'json';\n let client: WsClient | HttpClient | JsonHttpClient | JsonWebsocketClient;\n if (isHttp) {\n client = isJson\n ? Client.connect_json_http(connectUrl, connectOptions)\n : Client.connect_http(connectUrl, connectOptions);\n } else {\n client = isJson\n ? await Client.connect_json_ws(connectUrl, connectOptions)\n : await Client.connect_ws(connectUrl, connectOptions);\n }\n this.updateState({\n client,\n isConnected: true,\n isConnecting: false,\n connectionError: null,\n });\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to connect to ReifyDB';\n console.error('[Connection] Connection failed:', errorMessage, err);\n this.updateState({\n client: null,\n isConnected: false,\n isConnecting: false,\n connectionError: errorMessage,\n });\n throw err;\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.state.client) {\n try {\n if ('disconnect' in this.state.client) {\n (this.state.client as WsClient).disconnect();\n // Small delay to ensure WebSocket closes cleanly\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n } catch (err) {\n console.error('Error disconnecting:', err);\n }\n }\n\n this.updateState({\n client: null,\n isConnected: false,\n isConnecting: false,\n connectionError: null,\n });\n }\n\n async reconnect(url?: string, options?: Omit<WsClientOptions, 'url'>): Promise<void> {\n await this.disconnect();\n await this.connect(url, options);\n }\n\n getClient(): WsClient | HttpClient | JsonHttpClient | JsonWebsocketClient | null {\n return this.state.client;\n }\n\n isConnected(): boolean {\n return this.state.isConnected;\n }\n\n isConnecting(): boolean {\n return this.state.isConnecting;\n }\n\n getConnectionError(): string | null {\n return this.state.connectionError;\n }\n\n getState(): Omit<ConnectionState, 'listeners'> {\n const {listeners, ...state} = this.state;\n return state;\n }\n\n // Subscribe to state changes\n subscribe(listener: (state: ConnectionState) => void): () => void {\n this.state.listeners.add(listener);\n // Return unsubscribe function\n return () => {\n this.state.listeners.delete(listener);\n };\n }\n\n private updateState(updates: Partial<ConnectionState>): void {\n this.state = {\n ...this.state,\n ...updates,\n };\n\n // Notify all listeners\n this.state.listeners.forEach(listener => {\n listener(this.state);\n });\n }\n}\n\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { Connection, ConnectionConfig, DEFAULT_CONFIG } from './connection';\n\n/**\n * Singleton default connection instance.\n * This ensures a single global connection that gets reused and updated.\n */\nlet defaultConnection: Connection | null = null;\n\n/**\n * Get the singleton connection instance.\n * If a config is provided, the connection's config will be updated via setConfig().\n * @param config - Optional connection configuration\n * @returns The singleton Connection instance\n */\nexport function getConnection(config?: ConnectionConfig): Connection {\n // Create singleton on first call\n if (!defaultConnection) {\n const mergedConfig = {...DEFAULT_CONFIG, ...config};\n defaultConnection = new Connection(mergedConfig);\n // Start connection immediately - don't wait for React's useEffect\n defaultConnection.connect().catch(err => {\n console.error('[ConnectionPool] Eager connect failed:', err);\n });\n } else if (config) {\n // Only update config when explicitly provided, to avoid\n // stripping fields (e.g. token) that were set on creation.\n defaultConnection.setConfig({...DEFAULT_CONFIG, ...config});\n }\n\n return defaultConnection;\n}\n\n/**\n * Clear the singleton connection\n */\nexport async function clearConnection(): Promise<void> {\n if (defaultConnection) {\n await defaultConnection.disconnect();\n defaultConnection = null;\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport React, { createContext, useEffect, useRef, ReactNode } from 'react';\nimport { Connection, ConnectionConfig } from './connection';\nimport { getConnection } from './connection-pool';\n\nexport const ConnectionContext = createContext<Connection | null>(null);\n\nexport interface ConnectionProviderProps {\n config?: ConnectionConfig;\n children: ReactNode;\n}\n\nexport function ConnectionProvider({ config, children }: ConnectionProviderProps) {\n // Get the singleton connection - this always returns the same instance\n // but updates its config via setConfig()\n const connection = getConnection(config);\n\n // Track previous config to detect changes\n const prevConfigRef = useRef<string | undefined>(undefined);\n const currentConfigStr = JSON.stringify(config);\n\n useEffect(() => {\n const configChanged = prevConfigRef.current !== undefined &&\n prevConfigRef.current !== currentConfigStr;\n\n if (configChanged && connection.isConnected()) {\n // Config changed while connected - reconnect with new config\n connection.reconnect().catch(err => {\n console.error('[ConnectionProvider] Failed to reconnect:', err);\n });\n } else if (!connection.isConnected() && !connection.isConnecting()) {\n // Auto-connect if not connected\n connection.connect().catch(err => {\n console.error('[ConnectionProvider] Failed to connect:', err);\n });\n }\n\n // Update previous config reference\n prevConfigRef.current = currentConfigStr;\n }, [currentConfigStr, connection]);\n\n return (\n <ConnectionContext.Provider value={connection}>\n {children}\n </ConnectionContext.Provider>\n );\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useContext, useEffect, useState} from 'react';\nimport {ConnectionConfig} from '../connection/connection';\nimport {getConnection} from '../connection/connection-pool';\nimport {ConnectionContext} from '../connection/connection-context';\nimport {WsClient, HttpClient, JsonHttpClient, JsonWebsocketClient} from '@reifydb/client';\n\ninterface ConnectionState {\n client: WsClient | HttpClient | JsonHttpClient | JsonWebsocketClient | null;\n isConnected: boolean;\n isConnecting: boolean;\n connectionError: string | null;\n}\n\nexport function useConnection(overrideConfig?: ConnectionConfig) {\n const contextConnection = useContext(ConnectionContext);\n\n // Use override config if provided, otherwise use context, otherwise get default\n const [connection] = useState(() => {\n if (overrideConfig) {\n return getConnection(overrideConfig);\n }\n if (contextConnection) {\n return contextConnection;\n }\n return getConnection();\n });\n\n const [state, setState] = useState<ConnectionState>(() => connection.getState());\n\n useEffect(() => {\n // Get initial state immediately\n const currentState = connection.getState();\n setState(currentState);\n\n // Subscribe to connection state changes\n const unsubscribe = connection.subscribe((newState) => {\n setState({\n client: newState.client,\n isConnected: newState.isConnected,\n isConnecting: newState.isConnecting,\n connectionError: newState.connectionError,\n });\n });\n\n // No auto-connect - ConnectionProvider handles all auto-connection\n // Users must either wrap with ConnectionProvider or manually call connect()\n\n return unsubscribe;\n }, [connection]);\n\n return {\n ...state,\n connect: () => connection.connect(),\n disconnect: () => connection.disconnect(),\n reconnect: () => connection.reconnect(),\n };\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, SchemaNode} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useConnection} from './use-connection';\n\nexport interface QueryResult<T = any> {\n columns: Column[];\n rows: T[];\n executionTimeMs: number;\n rowsAffected?: number;\n}\n\nexport interface QueryState<T = any> {\n isExecuting: boolean;\n results: QueryResult<T>[] | undefined;\n error: string | undefined;\n executionTime: number | undefined;\n}\n\nexport interface QueryExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\nexport function useQueryExecutor<T = any>(options?: QueryExecutorOptions) {\n const {client} = useConnection(options?.connectionConfig);\n\n const [state, setState] = useState<QueryState<T>>({\n isExecuting: false,\n results: undefined,\n error: undefined,\n executionTime: undefined,\n });\n\n const clientRef = useRef(client);\n clientRef.current = client;\n\n const isMountedRef = useRef(true);\n useEffect(() => {\n return () => { isMountedRef.current = false; };\n }, []);\n\n const executionIdRef = useRef(0);\n const pendingRef = useRef<{statements: string | string[], params?: any, schemas?: readonly SchemaNode[]} | null>(null);\n\n const query = useCallback(\n (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]): Promise<void> => {\n const currentClient = clientRef.current;\n\n if (!currentClient) {\n pendingRef.current = {statements, params, schemas};\n setState(prev => ({...prev, isExecuting: true, error: undefined}));\n return Promise.resolve();\n }\n\n pendingRef.current = null;\n const thisExecution = ++executionIdRef.current;\n\n setState(prev => ({...prev, isExecuting: true, error: undefined}));\n\n const startTime = Date.now();\n\n return (async () => {\n try {\n const frameResults = await currentClient.query(statements, params || null, schemas || []) || [];\n\n if (executionIdRef.current !== thisExecution) return;\n\n const executionTime = Date.now() - startTime;\n\n const results: QueryResult<T>[] = frameResults.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const firstRow = frame[0];\n let columns: Column[] = [];\n\n const hasValueObjects = firstRow && typeof firstRow === 'object' &&\n Object.values(firstRow).some(v => v && typeof v === 'object' && 'type' in v);\n\n if (hasValueObjects) {\n columns = Object.keys(firstRow).map((key) => {\n const value = firstRow[key];\n const dataType = value?.type || 'Utf8';\n return {\n name: key,\n type: dataType,\n payload: [],\n };\n });\n } else {\n columns = Object.keys(firstRow).map((key) => ({\n name: key,\n type: 'Utf8',\n payload: [],\n }));\n }\n\n return {\n columns,\n rows: frame as T[],\n executionTimeMs: executionTime,\n };\n } else {\n return {\n columns: [],\n rows: [],\n executionTimeMs: executionTime,\n };\n }\n });\n\n if (!isMountedRef.current) return;\n setState({\n isExecuting: false,\n results,\n error: undefined,\n executionTime,\n });\n } catch (err) {\n if (executionIdRef.current !== thisExecution) return;\n\n const executionTime = Date.now() - startTime;\n let errorMessage = 'Query execution failed';\n\n if (err instanceof Error) {\n errorMessage = err.message;\n } else if (typeof err === 'string') {\n errorMessage = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n errorMessage = (err as { message: string }).message;\n }\n\n console.error('Query execution failed:', errorMessage);\n\n if (!isMountedRef.current) return;\n setState(prev => ({\n ...prev,\n isExecuting: false,\n error: errorMessage,\n executionTime,\n }));\n\n }\n })();\n },\n []\n );\n\n useEffect(() => {\n if (client && pendingRef.current) {\n const {statements, params, schemas} = pendingRef.current;\n query(statements, params, schemas);\n }\n }, [client, query]);\n\n const cancelQuery = useCallback(() => {\n executionIdRef.current++;\n setState((prev) => ({\n ...prev,\n isExecuting: false,\n error: 'Query cancelled',\n }));\n }, []);\n\n return {\n isExecuting: state.isExecuting,\n results: state.results,\n error: state.error,\n executionTime: state.executionTime,\n query,\n cancelQuery,\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {SchemaNode, InferSchema} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useQueryExecutor, type QueryResult, type QueryExecutorOptions} from './use-query-executor';\n\nexport interface QueryOptions extends QueryExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\n// Single query hook - returns a single result\nexport function useQueryOne<S extends SchemaNode = any>(\n rql: string,\n params?: any,\n schema?: S,\n options?: QueryOptions\n): {\n isExecuting: boolean;\n result: QueryResult<S extends SchemaNode ? InferSchema<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n query\n } = useQueryExecutor<S extends SchemaNode ? InferSchema<S> : any>(options);\n\n useEffect(() => {\n // Pass schema as array for the executor\n const schemas = schema ? [schema] : undefined;\n query(rql, params, schemas);\n }, [rql, params, query]);\n\n // Extract first result for single query convenience\n const result = useMemo(() => {\n return results && results.length > 0 ? results[0] : undefined;\n }, [results]);\n\n return {isExecuting, result, error};\n}\n\n// Multiple query hook - returns multiple results\nexport function useQueryMany<S extends readonly SchemaNode[] = readonly SchemaNode[]>(\n statements: string | string[],\n params?: any,\n schemas?: S,\n options?: QueryOptions\n): {\n isExecuting: boolean;\n results: QueryResult<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n query\n } = useQueryExecutor<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>(options);\n\n useEffect(() => {\n query(statements, params, schemas);\n }, [statements, params, query]);\n\n return {isExecuting, results, error};\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, SchemaNode} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useConnection} from './use-connection';\n\nexport interface CommandResult<T = any> {\n columns: Column[];\n rows: T[];\n executionTimeMs: number;\n rowsAffected?: number;\n}\n\nexport interface CommandState<T = any> {\n isExecuting: boolean;\n results: CommandResult<T>[] | undefined;\n error: string | undefined;\n executionTime: number | undefined;\n}\n\nexport interface CommandExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\nexport function useCommandExecutor<T = any>(options?: CommandExecutorOptions) {\n const {client} = useConnection(options?.connectionConfig);\n\n const [state, setState] = useState<CommandState<T>>({\n isExecuting: false,\n results: undefined,\n error: undefined,\n executionTime: undefined,\n });\n\n const clientRef = useRef(client);\n clientRef.current = client;\n\n const isMountedRef = useRef(false);\n useEffect(() => {\n isMountedRef.current = true;\n return () => { isMountedRef.current = false; };\n }, []);\n\n const executionIdRef = useRef(0);\n const pendingRef = useRef<{statements: string | string[], params?: any, schemas?: readonly SchemaNode[]} | null>(null);\n\n const command = useCallback(\n (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]): Promise<void> => {\n const currentClient = clientRef.current;\n\n if (!currentClient) {\n pendingRef.current = {statements, params, schemas};\n setState(prev => ({...prev, isExecuting: true, error: undefined}));\n return Promise.resolve();\n }\n\n pendingRef.current = null;\n const thisExecution = ++executionIdRef.current;\n\n setState(prev => ({...prev, isExecuting: true, error: undefined}));\n\n const startTime = Date.now();\n\n return (async () => {\n try {\n const frameResults = await currentClient.command(statements, params || null, schemas || []) || [];\n\n if (executionIdRef.current !== thisExecution) return;\n\n const executionTime = Date.now() - startTime;\n\n const results: CommandResult<T>[] = frameResults.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const firstRow = frame[0];\n let columns: Column[] = [];\n\n const hasValueObjects = firstRow && typeof firstRow === 'object' &&\n Object.values(firstRow).some(v => v && typeof v === 'object' && 'type' in v);\n\n if (hasValueObjects) {\n columns = Object.keys(firstRow).map((key) => {\n const value = firstRow[key];\n const dataType = value?.type || 'Utf8';\n return {\n name: key,\n type: dataType,\n payload: [],\n };\n });\n } else {\n columns = Object.keys(firstRow).map((key) => ({\n name: key,\n type: 'Utf8',\n payload: [],\n }));\n }\n\n return {\n columns,\n rows: frame as T[],\n executionTimeMs: executionTime,\n };\n } else {\n return {\n columns: [],\n rows: [],\n executionTimeMs: executionTime,\n rowsAffected: typeof frame === 'number' ? frame : undefined,\n };\n }\n });\n\n if (!isMountedRef.current) return;\n setState({\n isExecuting: false,\n results,\n error: undefined,\n executionTime,\n });\n } catch (err) {\n if (executionIdRef.current !== thisExecution) return;\n\n const executionTime = Date.now() - startTime;\n let errorMessage = 'Command execution failed';\n\n if (err instanceof Error) {\n errorMessage = err.message;\n } else if (typeof err === 'string') {\n errorMessage = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n errorMessage = (err as { message: string }).message;\n }\n\n console.error('Command execution failed:', errorMessage);\n\n if (!isMountedRef.current) return;\n setState(prev => ({\n ...prev,\n isExecuting: false,\n error: errorMessage,\n executionTime,\n }));\n\n }\n })();\n },\n []\n );\n\n useEffect(() => {\n if (client && pendingRef.current) {\n const {statements, params, schemas} = pendingRef.current;\n command(statements, params, schemas);\n }\n }, [client, command]);\n\n const cancelCommand = useCallback(() => {\n executionIdRef.current++;\n setState((prev) => ({\n ...prev,\n isExecuting: false,\n error: 'Command cancelled',\n }));\n }, []);\n\n return {\n isExecuting: state.isExecuting,\n results: state.results,\n error: state.error,\n executionTime: state.executionTime,\n command,\n cancelCommand,\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {SchemaNode, InferSchema} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useCommandExecutor, type CommandResult, type CommandExecutorOptions} from './use-command-executor';\n\nexport interface CommandOptions extends CommandExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\n// Single command hook - returns a single result\nexport function useCommandOne<S extends SchemaNode = any>(\n statement: string,\n params?: any,\n schema?: S,\n options?: CommandOptions\n): {\n isExecuting: boolean;\n result: CommandResult<S extends SchemaNode ? InferSchema<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n command\n } = useCommandExecutor<S extends SchemaNode ? InferSchema<S> : any>(options);\n\n useEffect(() => {\n // Pass schema as array for the executor\n const schemas = schema ? [schema] : undefined;\n command(statement, params, schemas);\n }, [statement, params, command]);\n\n // Extract first result for single command convenience\n const result = useMemo(() => {\n return results && results.length > 0 ? results[0] : undefined;\n }, [results]);\n\n return {isExecuting, result, error};\n}\n\n// Multiple command hook - returns multiple results\nexport function useCommandMany<S extends readonly SchemaNode[] = readonly SchemaNode[]>(\n statements: string | string[],\n params?: any,\n schemas?: S,\n options?: CommandOptions\n): {\n isExecuting: boolean;\n results: CommandResult<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n command\n } = useCommandExecutor<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>(options);\n\n useEffect(() => {\n command(statements, params, schemas);\n }, [statements, params, command]);\n\n return {isExecuting, results, error};\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, SchemaNode} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useConnection} from './use-connection';\n\nexport interface AdminResult<T = any> {\n columns: Column[];\n rows: T[];\n executionTimeMs: number;\n rowsAffected?: number;\n}\n\nexport interface AdminState<T = any> {\n isExecuting: boolean;\n results: AdminResult<T>[] | undefined;\n error: string | undefined;\n executionTime: number | undefined;\n}\n\nexport interface AdminExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\nexport function useAdminExecutor<T = any>(options?: AdminExecutorOptions) {\n const {client} = useConnection(options?.connectionConfig);\n\n const [state, setState] = useState<AdminState<T>>({\n isExecuting: false,\n results: undefined,\n error: undefined,\n executionTime: undefined,\n });\n\n // Stable refs so the callback never recreates\n const clientRef = useRef(client);\n clientRef.current = client;\n\n const isMountedRef = useRef(false);\n useEffect(() => {\n isMountedRef.current = true;\n return () => { isMountedRef.current = false; };\n }, []);\n\n // Counter to detect superseded executions\n const executionIdRef = useRef(0);\n\n // Stash pending call if client isn't ready yet\n const pendingRef = useRef<{statements: string | string[], params?: any, schemas?: readonly SchemaNode[]} | null>(null);\n\n const admin = useCallback(\n (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]): Promise<void> => {\n const currentClient = clientRef.current;\n // If no client yet, stash the request for replay when client connects\n if (!currentClient) {\n pendingRef.current = {statements, params, schemas};\n setState(prev => ({...prev, isExecuting: true, error: undefined}));\n return Promise.resolve();\n }\n\n pendingRef.current = null;\n const thisExecution = ++executionIdRef.current;\n\n setState(prev => ({...prev, isExecuting: true, error: undefined}));\n\n const startTime = Date.now();\n\n return (async () => {\n try {\n const frameResults = await currentClient.admin(statements, params || null, schemas || []) || [];\n\n // If this execution was superseded by a newer one, discard results\n if (executionIdRef.current !== thisExecution) return;\n\n const executionTime = Date.now() - startTime;\n\n // Process each frame into a AdminResult\n const results: AdminResult<T>[] = frameResults.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const firstRow = frame[0];\n let columns: Column[] = [];\n\n // Check if we have Value objects or plain objects\n const hasValueObjects = firstRow && typeof firstRow === 'object' &&\n Object.values(firstRow).some(v => v && typeof v === 'object' && 'type' in v);\n\n if (hasValueObjects) {\n columns = Object.keys(firstRow).map((key) => {\n const value = firstRow[key];\n const dataType = value?.type || 'Utf8';\n return {\n name: key,\n type: dataType,\n payload: [],\n };\n });\n } else {\n columns = Object.keys(firstRow).map((key) => ({\n name: key,\n type: 'Utf8',\n payload: [],\n }));\n }\n\n return {\n columns,\n rows: frame as T[],\n executionTimeMs: executionTime,\n };\n } else {\n return {\n columns: [],\n rows: [],\n executionTimeMs: executionTime,\n rowsAffected: typeof frame === 'number' ? frame : undefined,\n };\n }\n });\n\n if (!isMountedRef.current) return;\n setState({\n isExecuting: false,\n results,\n error: undefined,\n executionTime,\n });\n } catch (err) {\n if (executionIdRef.current !== thisExecution) return;\n\n const executionTime = Date.now() - startTime;\n let errorMessage = 'Admin execution failed';\n\n if (err instanceof Error) {\n errorMessage = err.message;\n } else if (typeof err === 'string') {\n errorMessage = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n errorMessage = (err as { message: string }).message;\n }\n\n console.error('Admin execution failed:', errorMessage);\n\n if (!isMountedRef.current) return;\n setState(prev => ({\n ...prev,\n isExecuting: false,\n error: errorMessage,\n executionTime,\n }));\n\n }\n })();\n },\n [] // stable — never recreates\n );\n\n // Replay pending request when client becomes available\n useEffect(() => {\n if (client && pendingRef.current) {\n const {statements, params, schemas} = pendingRef.current;\n admin(statements, params, schemas);\n }\n }, [client, admin]);\n\n const cancelAdmin = useCallback(() => {\n // Bump execution ID so any in-flight request is ignored on completion\n executionIdRef.current++;\n setState((prev) => ({\n ...prev,\n isExecuting: false,\n error: 'Admin cancelled',\n }));\n }, []);\n\n return {\n isExecuting: state.isExecuting,\n results: state.results,\n error: state.error,\n executionTime: state.executionTime,\n admin,\n cancelAdmin,\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {SchemaNode, InferSchema} from '@reifydb/core';\nimport {ConnectionConfig} from '../connection/connection';\nimport {useAdminExecutor, type AdminResult, type AdminExecutorOptions} from './use-admin-executor';\n\nexport interface AdminOptions extends AdminExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\n// Single admin hook - returns a single result\nexport function useAdminOne<S extends SchemaNode = any>(\n statement: string,\n params?: any,\n schema?: S,\n options?: AdminOptions\n): {\n isExecuting: boolean;\n result: AdminResult<S extends SchemaNode ? InferSchema<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n admin\n } = useAdminExecutor<S extends SchemaNode ? InferSchema<S> : any>(options);\n\n useEffect(() => {\n // Pass schema as array for the executor\n const schemas = schema ? [schema] : undefined;\n admin(statement, params, schemas);\n }, [statement, params, admin]);\n\n // Extract first result for single admin convenience\n const result = useMemo(() => {\n return results && results.length > 0 ? results[0] : undefined;\n }, [results]);\n\n return {isExecuting, result, error};\n}\n\n// Multiple admin hook - returns multiple results\nexport function useAdminMany<S extends readonly SchemaNode[] = readonly SchemaNode[]>(\n statements: string | string[],\n params?: any,\n schemas?: S,\n options?: AdminOptions\n): {\n isExecuting: boolean;\n results: AdminResult<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n isExecuting,\n results,\n error,\n admin\n } = useAdminExecutor<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>(options);\n\n useEffect(() => {\n admin(statements, params, schemas);\n }, [statements, params, admin]);\n\n return {isExecuting, results, error};\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { SchemaNode } from '@reifydb/core';\nimport { useConnection } from './use-connection';\nimport type { ConnectionConfig } from '../connection/connection';\n\nexport interface SubscriptionExecutorOptions {\n connectionConfig?: ConnectionConfig;\n}\n\nexport interface ChangeEvent<T> {\n operation: 'INSERT' | 'UPDATE' | 'REMOVE';\n rows: T[];\n timestamp: number;\n}\n\nexport interface SubscriptionState<T> {\n data: T[];\n changes: ChangeEvent<T>[];\n isSubscribed: boolean;\n isSubscribing: boolean;\n error: string | undefined;\n subscriptionId: string | undefined;\n}\n\nexport function useSubscriptionExecutor<T = any>(\n options?: SubscriptionExecutorOptions\n) {\n const { client } = useConnection(options?.connectionConfig);\n\n const [state, setState] = useState<SubscriptionState<T>>({\n data: [],\n changes: [],\n isSubscribed: false,\n isSubscribing: false,\n error: undefined,\n subscriptionId: undefined\n });\n\n // Use a ref for client to avoid recreating callbacks when client changes\n const clientRef = useRef(client);\n\n const subscriptionIdRef = useRef<string | undefined>(undefined);\n const queryRef = useRef<string | undefined>(undefined);\n const paramsRef = useRef<any>(undefined);\n const schemaRef = useRef<SchemaNode | undefined>(undefined);\n\n // Keep clientRef in sync with client\n useEffect(() => {\n clientRef.current = client;\n }, [client]);\n\n // Helper to add change event\n const addChangeEvent = useCallback((\n operation: 'INSERT' | 'UPDATE' | 'REMOVE',\n rows: T[]\n ) => {\n setState(prev => {\n const newChange: ChangeEvent<T> = {\n operation,\n rows,\n timestamp: Date.now()\n };\n\n const newChanges = [...prev.changes, newChange];\n\n return {\n ...prev,\n data: prev.data,\n changes: newChanges\n };\n });\n }, []);\n\n // Separate callbacks for each operation type\n const handleInsert = useCallback((rows: T[]) => {\n addChangeEvent('INSERT', rows);\n }, [addChangeEvent]);\n\n const handleUpdate = useCallback((rows: T[]) => {\n addChangeEvent('UPDATE', rows);\n }, [addChangeEvent]);\n\n const handleRemove = useCallback((rows: T[]) => {\n addChangeEvent('REMOVE', rows);\n }, [addChangeEvent]);\n\n const subscribe = useCallback(async (\n query: string,\n params?: any,\n schema?: SchemaNode\n ) => {\n const currentClient = clientRef.current;\n if (!currentClient) {\n setState(prev => ({ ...prev, error: 'Client not connected' }));\n return;\n }\n\n if (!('subscribe' in currentClient)) {\n setState(prev => ({ ...prev, error: 'Subscriptions require a WebSocket connection' }));\n return;\n }\n\n // Store refs for reconnection\n queryRef.current = query;\n paramsRef.current = params;\n schemaRef.current = schema;\n\n setState(prev => ({\n ...prev,\n isSubscribing: true,\n error: undefined\n }));\n\n try {\n const subId = await currentClient.subscribe(query, params, schema, {\n onInsert: handleInsert,\n onUpdate: handleUpdate,\n onRemove: handleRemove\n });\n\n subscriptionIdRef.current = subId;\n setState(prev => ({\n ...prev,\n isSubscribing: false,\n isSubscribed: true,\n subscriptionId: subId\n }));\n } catch (err: any) {\n setState(prev => ({\n ...prev,\n isSubscribing: false,\n error: err.message || 'Subscription failed'\n }));\n }\n }, [handleInsert, handleUpdate, handleRemove]);\n\n const unsubscribe = useCallback(async () => {\n const currentClient = clientRef.current;\n if (!currentClient || !subscriptionIdRef.current) return;\n if (!('unsubscribe' in currentClient)) return;\n\n try {\n await currentClient.unsubscribe(subscriptionIdRef.current);\n subscriptionIdRef.current = undefined;\n queryRef.current = undefined;\n paramsRef.current = undefined;\n schemaRef.current = undefined;\n\n setState(prev => ({\n ...prev,\n isSubscribed: false,\n subscriptionId: undefined\n }));\n } catch (err: any) {\n setState(prev => ({\n ...prev,\n error: err.message || 'Unsubscribe failed'\n }));\n }\n }, []);\n\n const clearChanges = useCallback(() => {\n setState(prev => ({ ...prev, changes: [] }));\n }, []);\n\n const clearData = useCallback(() => {\n setState(prev => ({ ...prev, data: [] }));\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (subscriptionIdRef.current && clientRef.current && 'unsubscribe' in clientRef.current) {\n clientRef.current.unsubscribe(subscriptionIdRef.current).catch(console.error);\n }\n };\n }, []);\n\n return {\n state,\n subscribe,\n unsubscribe,\n clearChanges,\n clearData\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useEffect, useMemo } from 'react';\nimport { SchemaNode, InferSchema } from '@reifydb/core';\nimport {\n useSubscriptionExecutor,\n type SubscriptionExecutorOptions,\n type ChangeEvent\n} from './use-subscription-executor';\n\nexport interface SubscriptionOptions extends SubscriptionExecutorOptions {\n enabled?: boolean; // Auto-subscribe (default: true)\n}\n\nexport function useSubscription<S extends SchemaNode = any>(\n query: string,\n params?: any,\n schema?: S,\n options?: SubscriptionOptions\n): {\n data: InferSchema<S>[];\n changes: ChangeEvent<InferSchema<S>>[];\n isSubscribed: boolean;\n isSubscribing: boolean;\n error: string | undefined;\n subscriptionId: string | undefined;\n} {\n const {\n state,\n subscribe,\n unsubscribe\n } = useSubscriptionExecutor<InferSchema<S>>(options);\n\n // Serialize params for stable comparison (objects create new refs each render)\n const paramsKey = useMemo(() => JSON.stringify(params), [params]);\n\n useEffect(() => {\n if (options?.enabled === false) return;\n\n subscribe(query, params, schema);\n\n return () => {\n unsubscribe();\n };\n }, [query, paramsKey, schema, options?.enabled, subscribe, unsubscribe]);\n\n return {\n data: state.data,\n changes: state.changes,\n isSubscribed: state.isSubscribed,\n isSubscribing: state.isSubscribing,\n error: state.error,\n subscriptionId: state.subscriptionId\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useState} from 'react';\nimport {Schema, InferSchema} from '@reifydb/core';\nimport {useQueryExecutor} from './use-query-executor';\n\nexport interface ColumnInfo {\n name: string;\n dataType: string;\n}\n\nexport interface TableInfo {\n name: string;\n columns: ColumnInfo[];\n}\n\nconst namespaceSchema = Schema.object({\n id: Schema.number(),\n name: Schema.string(),\n});\n\nconst tableSchema = Schema.object({\n id: Schema.number(),\n namespace_id: Schema.number(),\n name: Schema.string(),\n primary_key_id: Schema.number(),\n});\n\nconst viewSchema = Schema.object({\n id: Schema.number(),\n namespace_id: Schema.number(),\n name: Schema.string(),\n});\n\nconst columnSchema = Schema.object({\n id: Schema.number(),\n source_id: Schema.number(),\n source_type: Schema.number(),\n name: Schema.string(),\n type: Schema.number(),\n position: Schema.number(),\n auto_increment: Schema.boolean(),\n});\n\ntype NamespaceRow = InferSchema<typeof namespaceSchema>;\ntype TableRow = InferSchema<typeof tableSchema>;\ntype ViewRow = InferSchema<typeof viewSchema>;\ntype ColumnRow = InferSchema<typeof columnSchema>;\n\nexport function useSchema(): [boolean, TableInfo[], string | undefined] {\n const {isExecuting, results, error, query} = useQueryExecutor();\n const [schema, setSchema] = useState<TableInfo[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (!query) return;\n\n const fetchSchema = async () => {\n setIsLoading(true);\n\n try {\n await query(\n `OUTPUT FROM system::namespaces; OUTPUT FROM system::tables; OUTPUT FROM system::views; FROM system::columns;`,\n undefined,\n [namespaceSchema, tableSchema, viewSchema, columnSchema]\n );\n } catch (err) {\n console.error('Failed to fetch schema:', err);\n }\n };\n\n fetchSchema();\n }, [query]);\n\n useEffect(() => {\n if (!results || results.length < 4) {\n setIsLoading(isExecuting);\n return;\n }\n\n const tablesResult = results[1];\n const viewsResult = results[2];\n const columnsResult = results[3];\n\n if (!tablesResult?.rows || !viewsResult?.rows || !columnsResult?.rows) {\n setIsLoading(false);\n return;\n }\n\n const namespacesResult = results[0];\n const namespaces = namespacesResult.rows as unknown as NamespaceRow[];\n const tables = tablesResult.rows as unknown as TableRow[];\n const views = viewsResult.rows as unknown as ViewRow[];\n const columns = columnsResult.rows as unknown as ColumnRow[];\n\n const namespaceMap = new Map<number, string>();\n namespaces.forEach((ns) => {\n const id = ns.id?.valueOf() as number;\n const name = ns.name?.valueOf() as string;\n if (id !== undefined && name) {\n namespaceMap.set(id, name);\n }\n });\n\n const tableInfoMap = new Map<number, TableInfo>();\n\n tables.forEach((table) => {\n const tableId = table.id?.valueOf() as number;\n const namespaceId = table.namespace_id?.valueOf() as number;\n const tableName = table.name?.valueOf() as string;\n\n if (tableId === undefined || !tableName || namespaceId === undefined) return;\n\n const namespace = namespaceMap.get(namespaceId);\n if (!namespace) return;\n\n const fullTableName = `${namespace}::${tableName}`;\n\n tableInfoMap.set(tableId, {\n name: fullTableName,\n columns: [],\n });\n });\n\n views.forEach((view) => {\n const viewId = view.id?.valueOf() as number;\n const namespaceId = view.namespace_id?.valueOf() as number;\n const viewName = view.name?.valueOf() as string;\n\n if (viewId === undefined || !viewName || namespaceId === undefined) return;\n\n const namespace = namespaceMap.get(namespaceId);\n if (!namespace) return;\n\n const fullViewName = `${namespace}::${viewName}`;\n\n tableInfoMap.set(viewId, {\n name: fullViewName,\n columns: [],\n });\n });\n\n const typeMap: Record<number, string> = {\n 0: 'None',\n 1: 'Float4',\n 2: 'Float8',\n 3: 'Int1',\n 4: 'Int2',\n 5: 'Int4',\n 6: 'Int8',\n 7: 'Int16',\n 8: 'Utf8',\n 9: 'Uint1',\n 10: 'Uint2',\n 11: 'Uint4',\n 12: 'Uint8',\n 13: 'Uint16',\n 14: 'Boolean',\n 15: 'Date',\n 16: 'DateTime',\n 17: 'Time',\n 18: 'Duration',\n 19: 'IdentityId',\n 20: 'Uuid4',\n 21: 'Uuid7',\n 22: 'Blob',\n 23: 'Int',\n 24: 'Decimal',\n 25: 'Uint',\n 26: 'Any',\n };\n\n // Create a map to collect columns with their positions\n const tableColumnsMap = new Map<number, Array<{name: string; dataType: string; position: number}>>();\n\n columns.forEach((column) => {\n const sourceId = column.source_id?.valueOf() as number;\n const sourceType = column.source_type?.valueOf() as number;\n const columnName = column.name?.valueOf() as string;\n const typeId = column.type?.valueOf() as number;\n const position = column.position?.valueOf() as number;\n\n if (sourceId === undefined || !columnName || typeId === undefined) return;\n if (sourceType !== 0 && sourceType !== 1) return;\n\n if (!tableColumnsMap.has(sourceId)) {\n tableColumnsMap.set(sourceId, []);\n }\n\n tableColumnsMap.get(sourceId)!.push({\n name: columnName,\n dataType: typeMap[typeId] || `Unknown(${typeId})`,\n position: position ?? 0,\n });\n });\n\n // Sort columns by position and add to table info\n tableColumnsMap.forEach((cols, sourceId) => {\n const tableInfo = tableInfoMap.get(sourceId);\n if (tableInfo) {\n cols.sort((a, b) => a.position - b.position);\n tableInfo.columns = cols.map((c) => ({name: c.name, dataType: c.dataType}));\n }\n });\n\n const schemaArray = Array.from(tableInfoMap.values())\n .filter((table) => table.name !== 'reifydb::flows')\n .sort((a, b) => a.name.localeCompare(b.name));\n\n setSchema(schemaArray);\n setIsLoading(false);\n }, [results, isExecuting]);\n\n return [isLoading, schema, error];\n}\n"],"mappings":"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","names":["useEffect","useEffect","useState","useRef","useEffect","useState","useRef","useEffect","useEffect","useEffect","useState","useCallback","useRef","useEffect","useState","useRef","useEffect","useCallback","useEffect","useMemo","useEffect","useMemo","useState","useCallback","useRef","useEffect","useState","useRef","useEffect","useCallback","useEffect","useMemo","useEffect","useMemo","useState","useCallback","useRef","useEffect","useState","useRef","useEffect","useCallback","useEffect","useMemo","useMemo","useEffect","useEffect","useState","useState","useEffect"]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reifydb/react",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@reifydb/client": "0.4.
|
|
9
|
-
"@reifydb/core": "0.4.
|
|
8
|
+
"@reifydb/client": "0.4.7",
|
|
9
|
+
"@reifydb/core": "0.4.7"
|
|
10
10
|
},
|
|
11
11
|
"peerDependencies": {
|
|
12
12
|
"react": ">=16.8.0"
|
|
@@ -47,6 +47,6 @@
|
|
|
47
47
|
"test:integration:coverage": "vitest run --coverage --config vitest.config.ts",
|
|
48
48
|
"test:coverage": "pnpm test:integration:coverage",
|
|
49
49
|
"pretest:integration": "pnpm build",
|
|
50
|
-
"publish:npm": "pnpm publish --access public"
|
|
50
|
+
"publish:npm": "pnpm publish --access public --no-git-checks"
|
|
51
51
|
}
|
|
52
52
|
}
|