@reifydb/react 0.1.7 → 0.3.0

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 CHANGED
@@ -139,6 +139,80 @@ declare function useCommandMany<S extends readonly SchemaNode[] = readonly Schem
139
139
  error: string | undefined;
140
140
  };
141
141
 
142
+ interface AdminResult<T = any> {
143
+ columns: Column[];
144
+ rows: T[];
145
+ executionTimeMs: number;
146
+ rowsAffected?: number;
147
+ }
148
+ interface AdminState<T = any> {
149
+ isExecuting: boolean;
150
+ results: AdminResult<T>[] | undefined;
151
+ error: string | undefined;
152
+ executionTime: number | undefined;
153
+ }
154
+ interface AdminExecutorOptions {
155
+ connectionConfig?: ConnectionConfig;
156
+ }
157
+ declare function useAdminExecutor<T = any>(options?: AdminExecutorOptions): {
158
+ isExecuting: boolean;
159
+ results: AdminResult<T>[] | undefined;
160
+ error: string | undefined;
161
+ executionTime: number | undefined;
162
+ admin: (statements: string | string[], params?: any, schemas?: readonly SchemaNode[]) => void;
163
+ cancelAdmin: () => void;
164
+ };
165
+
166
+ interface AdminOptions extends AdminExecutorOptions {
167
+ connectionConfig?: ConnectionConfig;
168
+ }
169
+ declare function useAdminOne<S extends SchemaNode = any>(statement: string, params?: any, schema?: S, options?: AdminOptions): {
170
+ isExecuting: boolean;
171
+ result: AdminResult<S extends SchemaNode ? InferSchema<S> : any> | undefined;
172
+ error: string | undefined;
173
+ };
174
+ declare function useAdminMany<S extends readonly SchemaNode[] = readonly SchemaNode[]>(statements: string | string[], params?: any, schemas?: S, options?: AdminOptions): {
175
+ isExecuting: boolean;
176
+ results: AdminResult<S extends readonly SchemaNode[] ? InferSchema<S[number]> : any>[] | undefined;
177
+ error: string | undefined;
178
+ };
179
+
180
+ interface SubscriptionExecutorOptions {
181
+ connectionConfig?: ConnectionConfig;
182
+ }
183
+ interface ChangeEvent<T> {
184
+ operation: 'INSERT' | 'UPDATE' | 'REMOVE';
185
+ rows: T[];
186
+ timestamp: number;
187
+ }
188
+ interface SubscriptionState<T> {
189
+ data: T[];
190
+ changes: ChangeEvent<T>[];
191
+ isSubscribed: boolean;
192
+ isSubscribing: boolean;
193
+ error: string | undefined;
194
+ subscriptionId: string | undefined;
195
+ }
196
+ declare function useSubscriptionExecutor<T = any>(options?: SubscriptionExecutorOptions): {
197
+ state: SubscriptionState<T>;
198
+ subscribe: (query: string, params?: any, schema?: SchemaNode) => Promise<void>;
199
+ unsubscribe: () => Promise<void>;
200
+ clearChanges: () => void;
201
+ clearData: () => void;
202
+ };
203
+
204
+ interface SubscriptionOptions extends SubscriptionExecutorOptions {
205
+ enabled?: boolean;
206
+ }
207
+ declare function useSubscription<S extends SchemaNode = any>(query: string, params?: any, schema?: S, options?: SubscriptionOptions): {
208
+ data: InferSchema<S>[];
209
+ changes: ChangeEvent<InferSchema<S>>[];
210
+ isSubscribed: boolean;
211
+ isSubscribing: boolean;
212
+ error: string | undefined;
213
+ subscriptionId: string | undefined;
214
+ };
215
+
142
216
  interface ColumnInfo {
143
217
  name: string;
144
218
  dataType: string;
@@ -149,4 +223,4 @@ interface TableInfo {
149
223
  }
150
224
  declare function useSchema(): [boolean, TableInfo[], string | undefined];
151
225
 
152
- export { 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 TableInfo, clearConnection, getConnection, useCommandExecutor, useCommandMany, useCommandOne, useConnection, useQueryExecutor, useQueryMany, useQueryOne, useSchema };
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 };
package/dist/index.js CHANGED
@@ -117,6 +117,9 @@ function getConnection(config) {
117
117
  const effectiveConfig = config ? { ...DEFAULT_CONFIG, ...config } : DEFAULT_CONFIG;
118
118
  if (!defaultConnection) {
119
119
  defaultConnection = new Connection(effectiveConfig);
120
+ defaultConnection.connect().catch((err) => {
121
+ console.error("[ConnectionPool] Eager connect failed:", err);
122
+ });
120
123
  } else {
121
124
  defaultConnection.setConfig(effectiveConfig);
122
125
  }
@@ -264,6 +267,7 @@ function useQueryExecutor(options) {
264
267
  } else if (err && typeof err === "object" && "message" in err) {
265
268
  errorMessage = err.message;
266
269
  }
270
+ console.error("Query execution failed:", errorMessage);
267
271
  setState({
268
272
  isExecuting: false,
269
273
  results: void 0,
@@ -411,6 +415,7 @@ function useCommandExecutor(options) {
411
415
  } else if (err && typeof err === "object" && "message" in err) {
412
416
  errorMessage = err.message;
413
417
  }
418
+ console.error("Command execution failed:", errorMessage);
414
419
  setState({
415
420
  isExecuting: false,
416
421
  results: void 0,
@@ -477,8 +482,304 @@ function useCommandMany(statements, params, schemas, options) {
477
482
  return { isExecuting, results, error };
478
483
  }
479
484
 
485
+ // src/hooks/use-admin-executor.ts
486
+ import { useState as useState4, useCallback as useCallback3, useRef as useRef4 } from "react";
487
+ function useAdminExecutor(options) {
488
+ const { client } = useConnection(options?.connectionConfig);
489
+ const [state, setState] = useState4({
490
+ isExecuting: false,
491
+ results: void 0,
492
+ error: void 0,
493
+ executionTime: void 0
494
+ });
495
+ const abortControllerRef = useRef4(null);
496
+ const admin = useCallback3(
497
+ (statements, params, schemas) => {
498
+ if (abortControllerRef.current) {
499
+ abortControllerRef.current.abort();
500
+ }
501
+ abortControllerRef.current = new AbortController();
502
+ setState({
503
+ isExecuting: true,
504
+ results: void 0,
505
+ error: void 0,
506
+ executionTime: void 0
507
+ });
508
+ const startTime = Date.now();
509
+ (async () => {
510
+ try {
511
+ const frameResults = await client?.admin(statements, params || null, schemas || []) || [];
512
+ const executionTime = Date.now() - startTime;
513
+ const results = frameResults.map((frame) => {
514
+ if (Array.isArray(frame) && frame.length > 0) {
515
+ const firstRow = frame[0];
516
+ let columns = [];
517
+ const hasValueObjects = firstRow && typeof firstRow === "object" && Object.values(firstRow).some((v) => v && typeof v === "object" && "type" in v);
518
+ if (hasValueObjects) {
519
+ columns = Object.keys(firstRow).map((key) => {
520
+ const value = firstRow[key];
521
+ const dataType = value?.type || "Utf8";
522
+ return {
523
+ name: key,
524
+ type: dataType,
525
+ data: []
526
+ };
527
+ });
528
+ } else {
529
+ columns = Object.keys(firstRow).map((key) => ({
530
+ name: key,
531
+ type: "Utf8",
532
+ // Default type for plain objects
533
+ data: []
534
+ }));
535
+ }
536
+ return {
537
+ columns,
538
+ rows: frame,
539
+ executionTimeMs: executionTime
540
+ };
541
+ } else {
542
+ return {
543
+ columns: [],
544
+ rows: [],
545
+ executionTimeMs: executionTime,
546
+ rowsAffected: typeof frame === "number" ? frame : void 0
547
+ };
548
+ }
549
+ });
550
+ setState({
551
+ isExecuting: false,
552
+ results,
553
+ error: void 0,
554
+ executionTime
555
+ });
556
+ } catch (err) {
557
+ const executionTime = Date.now() - startTime;
558
+ let errorMessage = "Admin execution failed";
559
+ if (err instanceof Error) {
560
+ errorMessage = err.message;
561
+ } else if (typeof err === "string") {
562
+ errorMessage = err;
563
+ } else if (err && typeof err === "object" && "message" in err) {
564
+ errorMessage = err.message;
565
+ }
566
+ console.error("Admin execution failed:", errorMessage);
567
+ setState({
568
+ isExecuting: false,
569
+ results: void 0,
570
+ error: errorMessage,
571
+ executionTime
572
+ });
573
+ } finally {
574
+ abortControllerRef.current = null;
575
+ }
576
+ })();
577
+ },
578
+ [client]
579
+ );
580
+ const cancelAdmin = useCallback3(() => {
581
+ if (abortControllerRef.current) {
582
+ abortControllerRef.current.abort();
583
+ setState((prev) => ({
584
+ ...prev,
585
+ isExecuting: false,
586
+ error: "Admin cancelled"
587
+ }));
588
+ }
589
+ }, []);
590
+ return {
591
+ // State
592
+ isExecuting: state.isExecuting,
593
+ results: state.results,
594
+ error: state.error,
595
+ executionTime: state.executionTime,
596
+ // Actions
597
+ admin,
598
+ cancelAdmin
599
+ };
600
+ }
601
+
602
+ // src/hooks/use-admin.ts
603
+ import { useEffect as useEffect5, useMemo as useMemo3 } from "react";
604
+ function useAdminOne(statement, params, schema, options) {
605
+ const {
606
+ isExecuting,
607
+ results,
608
+ error,
609
+ admin
610
+ } = useAdminExecutor(options);
611
+ useEffect5(() => {
612
+ const schemas = schema ? [schema] : void 0;
613
+ admin(statement, params, schemas);
614
+ }, [statement, params, admin]);
615
+ const result = useMemo3(() => {
616
+ return results && results.length > 0 ? results[0] : void 0;
617
+ }, [results]);
618
+ return { isExecuting, result, error };
619
+ }
620
+ function useAdminMany(statements, params, schemas, options) {
621
+ const {
622
+ isExecuting,
623
+ results,
624
+ error,
625
+ admin
626
+ } = useAdminExecutor(options);
627
+ useEffect5(() => {
628
+ admin(statements, params, schemas);
629
+ }, [statements, params, admin]);
630
+ return { isExecuting, results, error };
631
+ }
632
+
633
+ // src/hooks/use-subscription-executor.ts
634
+ import { useState as useState5, useCallback as useCallback4, useRef as useRef5, useEffect as useEffect6 } from "react";
635
+ function useSubscriptionExecutor(options) {
636
+ const { client } = useConnection(options?.connectionConfig);
637
+ const [state, setState] = useState5({
638
+ data: [],
639
+ changes: [],
640
+ isSubscribed: false,
641
+ isSubscribing: false,
642
+ error: void 0,
643
+ subscriptionId: void 0
644
+ });
645
+ const clientRef = useRef5(client);
646
+ const subscriptionIdRef = useRef5(void 0);
647
+ const queryRef = useRef5(void 0);
648
+ const paramsRef = useRef5(void 0);
649
+ const schemaRef = useRef5(void 0);
650
+ useEffect6(() => {
651
+ clientRef.current = client;
652
+ }, [client]);
653
+ const addChangeEvent = useCallback4((operation, rows) => {
654
+ setState((prev) => {
655
+ const newChange = {
656
+ operation,
657
+ rows,
658
+ timestamp: Date.now()
659
+ };
660
+ const newChanges = [...prev.changes, newChange];
661
+ return {
662
+ ...prev,
663
+ data: prev.data,
664
+ changes: newChanges
665
+ };
666
+ });
667
+ }, []);
668
+ const handleInsert = useCallback4((rows) => {
669
+ addChangeEvent("INSERT", rows);
670
+ }, [addChangeEvent]);
671
+ const handleUpdate = useCallback4((rows) => {
672
+ addChangeEvent("UPDATE", rows);
673
+ }, [addChangeEvent]);
674
+ const handleRemove = useCallback4((rows) => {
675
+ addChangeEvent("REMOVE", rows);
676
+ }, [addChangeEvent]);
677
+ const subscribe = useCallback4(async (query, params, schema) => {
678
+ const currentClient = clientRef.current;
679
+ if (!currentClient) {
680
+ setState((prev) => ({ ...prev, error: "Client not connected" }));
681
+ return;
682
+ }
683
+ queryRef.current = query;
684
+ paramsRef.current = params;
685
+ schemaRef.current = schema;
686
+ setState((prev) => ({
687
+ ...prev,
688
+ isSubscribing: true,
689
+ error: void 0
690
+ }));
691
+ try {
692
+ const subId = await currentClient.subscribe(query, params, schema, {
693
+ onInsert: handleInsert,
694
+ onUpdate: handleUpdate,
695
+ onRemove: handleRemove
696
+ });
697
+ subscriptionIdRef.current = subId;
698
+ setState((prev) => ({
699
+ ...prev,
700
+ isSubscribing: false,
701
+ isSubscribed: true,
702
+ subscriptionId: subId
703
+ }));
704
+ } catch (err) {
705
+ setState((prev) => ({
706
+ ...prev,
707
+ isSubscribing: false,
708
+ error: err.message || "Subscription failed"
709
+ }));
710
+ }
711
+ }, [handleInsert, handleUpdate, handleRemove]);
712
+ const unsubscribe = useCallback4(async () => {
713
+ const currentClient = clientRef.current;
714
+ if (!currentClient || !subscriptionIdRef.current) return;
715
+ try {
716
+ await currentClient.unsubscribe(subscriptionIdRef.current);
717
+ subscriptionIdRef.current = void 0;
718
+ queryRef.current = void 0;
719
+ paramsRef.current = void 0;
720
+ schemaRef.current = void 0;
721
+ setState((prev) => ({
722
+ ...prev,
723
+ isSubscribed: false,
724
+ subscriptionId: void 0
725
+ }));
726
+ } catch (err) {
727
+ setState((prev) => ({
728
+ ...prev,
729
+ error: err.message || "Unsubscribe failed"
730
+ }));
731
+ }
732
+ }, []);
733
+ const clearChanges = useCallback4(() => {
734
+ setState((prev) => ({ ...prev, changes: [] }));
735
+ }, []);
736
+ const clearData = useCallback4(() => {
737
+ setState((prev) => ({ ...prev, data: [] }));
738
+ }, []);
739
+ useEffect6(() => {
740
+ return () => {
741
+ if (subscriptionIdRef.current && clientRef.current) {
742
+ clientRef.current.unsubscribe(subscriptionIdRef.current).catch(console.error);
743
+ }
744
+ };
745
+ }, []);
746
+ return {
747
+ state,
748
+ subscribe,
749
+ unsubscribe,
750
+ clearChanges,
751
+ clearData
752
+ };
753
+ }
754
+
755
+ // src/hooks/use-subscription.ts
756
+ import { useEffect as useEffect7, useMemo as useMemo4 } from "react";
757
+ function useSubscription(query, params, schema, options) {
758
+ const {
759
+ state,
760
+ subscribe,
761
+ unsubscribe
762
+ } = useSubscriptionExecutor(options);
763
+ const paramsKey = useMemo4(() => JSON.stringify(params), [params]);
764
+ useEffect7(() => {
765
+ if (options?.enabled === false) return;
766
+ subscribe(query, params, schema);
767
+ return () => {
768
+ unsubscribe();
769
+ };
770
+ }, [query, paramsKey, schema, options?.enabled, subscribe, unsubscribe]);
771
+ return {
772
+ data: state.data,
773
+ changes: state.changes,
774
+ isSubscribed: state.isSubscribed,
775
+ isSubscribing: state.isSubscribing,
776
+ error: state.error,
777
+ subscriptionId: state.subscriptionId
778
+ };
779
+ }
780
+
480
781
  // src/hooks/use-schema.ts
481
- import { useEffect as useEffect5, useState as useState4 } from "react";
782
+ import { useEffect as useEffect8, useState as useState6 } from "react";
482
783
  import { Schema } from "@reifydb/core";
483
784
  var namespaceSchema = Schema.object({
484
785
  id: Schema.number(),
@@ -506,15 +807,15 @@ var columnSchema = Schema.object({
506
807
  });
507
808
  function useSchema() {
508
809
  const { isExecuting, results, error, query } = useQueryExecutor();
509
- const [schema, setSchema] = useState4([]);
510
- const [isLoading, setIsLoading] = useState4(true);
511
- useEffect5(() => {
810
+ const [schema, setSchema] = useState6([]);
811
+ const [isLoading, setIsLoading] = useState6(true);
812
+ useEffect8(() => {
512
813
  if (!query) return;
513
814
  const fetchSchema = async () => {
514
815
  setIsLoading(true);
515
816
  try {
516
817
  await query(
517
- `FROM system.namespaces; FROM system.tables; FROM system.views; FROM system.columns;`,
818
+ `OUTPUT FROM system.namespaces; OUTPUT FROM system.tables; OUTPUT FROM system.views; FROM system.columns;`,
518
819
  void 0,
519
820
  [namespaceSchema, tableSchema, viewSchema, columnSchema]
520
821
  );
@@ -524,7 +825,7 @@ function useSchema() {
524
825
  };
525
826
  fetchSchema();
526
827
  }, [query]);
527
- useEffect5(() => {
828
+ useEffect8(() => {
528
829
  if (!results || results.length < 4) {
529
830
  setIsLoading(isExecuting);
530
831
  return;
@@ -577,7 +878,7 @@ function useSchema() {
577
878
  });
578
879
  });
579
880
  const typeMap = {
580
- 0: "Undefined",
881
+ 0: "None",
581
882
  1: "Float4",
582
883
  2: "Float8",
583
884
  3: "Int1",
@@ -596,15 +897,14 @@ function useSchema() {
596
897
  16: "DateTime",
597
898
  17: "Time",
598
899
  18: "Duration",
599
- 19: "RowNumber",
900
+ 19: "IdentityId",
600
901
  20: "Uuid4",
601
902
  21: "Uuid7",
602
903
  22: "Blob",
603
- 23: "IdentityId",
604
- 24: "Int",
605
- 25: "Decimal",
606
- 26: "Uint",
607
- 27: "Any"
904
+ 23: "Int",
905
+ 24: "Decimal",
906
+ 25: "Uint",
907
+ 26: "Any"
608
908
  };
609
909
  const tableColumnsMap = /* @__PURE__ */ new Map();
610
910
  columns.forEach((column) => {
@@ -644,6 +944,9 @@ export {
644
944
  DEFAULT_CONFIG,
645
945
  clearConnection,
646
946
  getConnection,
947
+ useAdminExecutor,
948
+ useAdminMany,
949
+ useAdminOne,
647
950
  useCommandExecutor,
648
951
  useCommandMany,
649
952
  useCommandOne,
@@ -651,6 +954,8 @@ export {
651
954
  useQueryExecutor,
652
955
  useQueryMany,
653
956
  useQueryOne,
654
- useSchema
957
+ useSchema,
958
+ useSubscription,
959
+ useSubscriptionExecutor
655
960
  };
656
961
  //# sourceMappingURL=index.js.map
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-schema.ts"],"sourcesContent":["export * 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 {useSchema, type TableInfo, type ColumnInfo} from './hooks/use-schema';","import {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","import { 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 } 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}","import {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}","import {useState, useCallback, useRef} 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\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 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 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}","import {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}","import {useState, useCallback, useRef} 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\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 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 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}","import {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}","import {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 `FROM system.namespaces; FROM system.tables; 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: 'Undefined',\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: 'RowNumber',\n 20: 'Uuid4',\n 21: 'Uuid7',\n 22: 'Blob',\n 23: 'IdentityId',\n 24: 'Int',\n 25: 'Decimal',\n 26: 'Uint',\n 27: '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","useState","useRef","useEffect","useEffect","useState","useCallback","useRef","useState","useRef","useCallback","useEffect","useMemo","useEffect","useMemo","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: MIT\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: MIT\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: MIT\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: MIT\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: MIT\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef} 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\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 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 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: MIT\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: MIT\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef} 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\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 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 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: MIT\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: MIT\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef} 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\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 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 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: MIT\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: MIT\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: MIT\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: MIT\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","useState","useRef","useEffect","useEffect","useState","useCallback","useRef","useState","useRef","useCallback","useEffect","useMemo","useEffect","useMemo","useState","useCallback","useRef","useState","useRef","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.1.7",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "dependencies": {
8
- "@reifydb/core": "0.1.7",
9
- "@reifydb/client": "0.1.7"
8
+ "@reifydb/core": "0.3.0",
9
+ "@reifydb/client": "0.3.0"
10
10
  },
11
11
  "peerDependencies": {
12
12
  "react": ">=16.8.0"
package/dist/index.d.mts DELETED
@@ -1,2 +0,0 @@
1
-
2
- export { }
package/dist/index.mjs DELETED
File without changes