@reifydb/react 0.5.6 → 0.6.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.js CHANGED
@@ -77,8 +77,7 @@ var Connection = class {
77
77
  if (this.state.client) {
78
78
  try {
79
79
  if ("disconnect" in this.state.client) {
80
- this.state.client.disconnect();
81
- await new Promise((resolve) => setTimeout(resolve, 10));
80
+ await this.state.client.disconnect();
82
81
  }
83
82
  } catch (err) {
84
83
  console.error("Error disconnecting:", err);
@@ -871,6 +870,11 @@ var column_shape = Shape.object({
871
870
  position: Shape.number(),
872
871
  auto_increment: Shape.boolean()
873
872
  });
873
+ function to_number(value) {
874
+ if (value === void 0 || value === null) return void 0;
875
+ const n = Number(value);
876
+ return Number.isNaN(n) ? void 0 : n;
877
+ }
874
878
  function useShape() {
875
879
  const { is_executing, results, error, query } = useQueryExecutor();
876
880
  const [shape, set_shape] = useState6([]);
@@ -910,7 +914,7 @@ function useShape() {
910
914
  const columns = columns_result.rows;
911
915
  const namespace_map = /* @__PURE__ */ new Map();
912
916
  namespaces.forEach((ns) => {
913
- const id = ns.id?.valueOf();
917
+ const id = to_number(ns.id);
914
918
  const name = ns.name?.valueOf();
915
919
  if (id !== void 0 && name) {
916
920
  namespace_map.set(id, name);
@@ -918,8 +922,8 @@ function useShape() {
918
922
  });
919
923
  const table_info_map = /* @__PURE__ */ new Map();
920
924
  tables.forEach((table) => {
921
- const table_id = table.id?.valueOf();
922
- const namespace_id = table.namespace_id?.valueOf();
925
+ const table_id = to_number(table.id);
926
+ const namespace_id = to_number(table.namespace_id);
923
927
  const table_name = table.name?.valueOf();
924
928
  if (table_id === void 0 || !table_name || namespace_id === void 0) return;
925
929
  const namespace = namespace_map.get(namespace_id);
@@ -931,8 +935,8 @@ function useShape() {
931
935
  });
932
936
  });
933
937
  views.forEach((view) => {
934
- const view_id = view.id?.valueOf();
935
- const namespace_id = view.namespace_id?.valueOf();
938
+ const view_id = to_number(view.id);
939
+ const namespace_id = to_number(view.namespace_id);
936
940
  const view_name = view.name?.valueOf();
937
941
  if (view_id === void 0 || !view_name || namespace_id === void 0) return;
938
942
  const namespace = namespace_map.get(namespace_id);
@@ -974,11 +978,11 @@ function useShape() {
974
978
  };
975
979
  const table_columns_map = /* @__PURE__ */ new Map();
976
980
  columns.forEach((column) => {
977
- const shape_id = column.shape_id?.valueOf();
978
- const shape_type = column.shape_type?.valueOf();
981
+ const shape_id = to_number(column.shape_id);
982
+ const shape_type = to_number(column.shape_type);
979
983
  const column_name = column.name?.valueOf();
980
- const type_id = column.type?.valueOf();
981
- const position = column.position?.valueOf();
984
+ const type_id = to_number(column.type);
985
+ const position = to_number(column.position);
982
986
  if (shape_id === void 0 || !column_name || type_id === void 0) return;
983
987
  if (shape_type !== 0 && shape_type !== 1) return;
984
988
  if (!table_columns_map.has(shape_id)) {
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-shape.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 {get_connection, clear_connection} 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 {useShape, type TableInfo, type ColumnInfo} from './hooks/use-shape';","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {Client, WsClient, HttpClient, JsonHttpClient, JsonWsClient, type WsClientOptions} from '@reifydb/client';\n\ninterface ConnectionState {\n client: WsClient | HttpClient | JsonHttpClient | JsonWsClient | null;\n is_connected: boolean;\n is_connecting: boolean;\n connection_error: 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: {timeout_ms: 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 is_connected: false,\n is_connecting: false,\n connection_error: null,\n listeners: new Set(),\n };\n private config: ConnectionConfig;\n private connect_promise: Promise<void> | null = null;\n\n constructor(config: ConnectionConfig = DEFAULT_CONFIG) {\n this.config = {...DEFAULT_CONFIG, ...config};\n }\n\n set_config(config: ConnectionConfig): void {\n this.config = config;\n }\n\n get_config(): ConnectionConfig {\n return this.config;\n }\n\n async connect(url?: string, options?: Omit<WsClientOptions, 'url'>): Promise<void> {\n if (this.state.is_connected) {\n return;\n }\n\n // If already connecting, wait for the in-flight connection\n if (this.connect_promise) {\n return this.connect_promise;\n }\n\n const connect_url = url || this.config.url || DEFAULT_CONFIG.url!;\n const connect_options = {token: this.config.token, ...this.config.options, ...options};\n\n this.update_state({\n is_connecting: true,\n connection_error: null,\n });\n\n this.connect_promise = (async () => {\n try {\n const isHttp = connect_url.startsWith('http://') || connect_url.startsWith('https://');\n const isJson = this.config.format === 'json';\n let client: WsClient | HttpClient | JsonHttpClient | JsonWsClient;\n if (isHttp) {\n client = isJson\n ? Client.connect_json_http(connect_url, connect_options)\n : Client.connect_http(connect_url, connect_options);\n } else {\n client = isJson\n ? await Client.connect_json_ws(connect_url, connect_options)\n : await Client.connect_ws(connect_url, connect_options);\n }\n this.update_state({\n client,\n is_connected: true,\n is_connecting: false,\n connection_error: null,\n });\n } catch (err) {\n const error_message = err instanceof Error ? err.message : 'Failed to connect to ReifyDB';\n console.error('[Connection] Connection failed:', error_message, err);\n this.update_state({\n client: null,\n is_connected: false,\n is_connecting: false,\n connection_error: error_message,\n });\n throw err;\n } finally {\n this.connect_promise = null;\n }\n })();\n\n return this.connect_promise;\n }\n\n async disconnect(): Promise<void> {\n this.connect_promise = null;\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.update_state({\n client: null,\n is_connected: false,\n is_connecting: false,\n connection_error: 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 get_client(): WsClient | HttpClient | JsonHttpClient | JsonWsClient | null {\n return this.state.client;\n }\n\n is_connected(): boolean {\n return this.state.is_connected;\n }\n\n is_connecting(): boolean {\n return this.state.is_connecting;\n }\n\n get_connection_error(): string | null {\n return this.state.connection_error;\n }\n\n get_state(): 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 update_state(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 default_connection: 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 set_config().\n * @param config - Optional connection configuration\n * @returns The singleton Connection instance\n */\nexport function get_connection(config?: ConnectionConfig): Connection {\n // Create singleton on first call\n if (!default_connection) {\n const merged_config = {...DEFAULT_CONFIG, ...config};\n default_connection = new Connection(merged_config);\n // Start connection immediately - don't wait for React's useEffect\n default_connection.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 default_connection.set_config({...DEFAULT_CONFIG, ...config});\n }\n\n return default_connection;\n}\n\n/**\n * Clear the singleton connection\n */\nexport async function clear_connection(): Promise<void> {\n if (default_connection) {\n await default_connection.disconnect();\n default_connection = 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 { get_connection } 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 set_config()\n const connection = get_connection(config);\n\n // Track previous config to detect changes\n const prev_config_ref = useRef<string | undefined>(undefined);\n const current_config_str = JSON.stringify(config);\n\n useEffect(() => {\n const config_changed = prev_config_ref.current !== undefined &&\n prev_config_ref.current !== current_config_str;\n\n if (config_changed && connection.is_connected()) {\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.is_connected() && !connection.is_connecting()) {\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 prev_config_ref.current = current_config_str;\n }, [current_config_str, 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 {get_connection} from '../connection/connection-pool';\nimport {ConnectionContext} from '../connection/connection-context';\nimport {WsClient, HttpClient, JsonHttpClient, JsonWsClient} from '@reifydb/client';\n\ninterface ConnectionState {\n client: WsClient | HttpClient | JsonHttpClient | JsonWsClient | null;\n is_connected: boolean;\n is_connecting: boolean;\n connection_error: string | null;\n}\n\nexport function useConnection(override_config?: ConnectionConfig) {\n const context_connection = useContext(ConnectionContext);\n\n // Use override config if provided, otherwise use context, otherwise get default\n const [connection] = useState(() => {\n if (override_config) {\n return get_connection(override_config);\n }\n if (context_connection) {\n return context_connection;\n }\n return get_connection();\n });\n\n const [state, setState] = useState<ConnectionState>(() => connection.get_state());\n\n useEffect(() => {\n // Get initial state immediately\n const current_state = connection.get_state();\n setState(current_state);\n\n // Subscribe to connection state changes\n const unsubscribe = connection.subscribe((new_state) => {\n setState({\n client: new_state.client,\n is_connected: new_state.is_connected,\n is_connecting: new_state.is_connecting,\n connection_error: new_state.connection_error,\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, ShapeNode} 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 execution_time_ms: number;\n rows_affected?: number;\n}\n\nexport interface QueryState<T = any> {\n is_executing: boolean;\n results: QueryResult<T>[] | undefined;\n error: string | undefined;\n execution_time: number | undefined;\n}\n\nexport interface QueryExecutorOptions {\n connection_config?: ConnectionConfig;\n}\n\nexport function useQueryExecutor<T = any>(options?: QueryExecutorOptions) {\n const {client} = useConnection(options?.connection_config);\n\n const [state, setState] = useState<QueryState<T>>({\n is_executing: false,\n results: undefined,\n error: undefined,\n execution_time: undefined,\n });\n\n const client_ref = useRef(client);\n client_ref.current = client;\n\n const is_mounted_ref = useRef(true);\n useEffect(() => {\n return () => { is_mounted_ref.current = false; };\n }, []);\n\n const execution_id_ref = useRef(0);\n const pending_ref = useRef<{rql: string, params?: any, shapes?: readonly ShapeNode[]} | null>(null);\n\n const query = useCallback(\n (rql: string, params?: any, shapes?: readonly ShapeNode[]): Promise<void> => {\n const current_client = client_ref.current;\n\n if (!current_client) {\n pending_ref.current = {rql, params, shapes};\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n return Promise.resolve();\n }\n\n pending_ref.current = null;\n const this_execution = ++execution_id_ref.current;\n\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n\n const start_time = Date.now();\n\n return (async () => {\n try {\n const frame_results = await current_client.query(rql, params || null, shapes || []) || [];\n\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n\n const results: QueryResult<T>[] = frame_results.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const first_row = frame[0];\n let columns: Column[] = [];\n\n const has_value_objects = first_row && typeof first_row === 'object' &&\n Object.values(first_row).some(v => v && typeof v === 'object' && 'type' in v);\n\n if (has_value_objects) {\n columns = Object.keys(first_row).map((key) => {\n const value = first_row[key];\n const data_type = value?.type || 'Utf8';\n return {\n name: key,\n type: data_type,\n payload: [],\n };\n });\n } else {\n columns = Object.keys(first_row).map((key) => ({\n name: key,\n type: 'Utf8',\n payload: [],\n }));\n }\n\n return {\n columns,\n rows: frame as T[],\n execution_time_ms: execution_time,\n };\n } else {\n return {\n columns: [],\n rows: [],\n execution_time_ms: execution_time,\n };\n }\n });\n\n if (!is_mounted_ref.current) return;\n setState({\n is_executing: false,\n results,\n error: undefined,\n execution_time,\n });\n } catch (err) {\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n let error_message = 'Query execution failed';\n\n if (err instanceof Error) {\n error_message = err.message;\n } else if (typeof err === 'string') {\n error_message = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n error_message = (err as { message: string }).message;\n }\n\n console.error('Query execution failed:', error_message);\n\n if (!is_mounted_ref.current) return;\n setState(prev => ({\n ...prev,\n is_executing: false,\n error: error_message,\n execution_time,\n }));\n\n }\n })();\n },\n []\n );\n\n useEffect(() => {\n if (client && pending_ref.current) {\n const {rql, params, shapes} = pending_ref.current;\n query(rql, params, shapes);\n }\n }, [client, query]);\n\n const cancel_query = useCallback(() => {\n execution_id_ref.current++;\n setState((prev) => ({\n ...prev,\n is_executing: false,\n error: 'Query cancelled',\n }));\n }, []);\n\n return {\n is_executing: state.is_executing,\n results: state.results,\n error: state.error,\n execution_time: state.execution_time,\n query,\n cancel_query,\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {ShapeNode, InferShape} 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 connection_config?: ConnectionConfig;\n}\n\n// Single query hook - returns a single result\nexport function useQueryOne<S extends ShapeNode = any>(\n rql: string,\n params?: any,\n shape?: S,\n options?: QueryOptions\n): {\n is_executing: boolean;\n result: QueryResult<S extends ShapeNode ? InferShape<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n query\n } = useQueryExecutor<S extends ShapeNode ? InferShape<S> : any>(options);\n\n useEffect(() => {\n // Pass shape as array for the executor\n const shapes = shape ? [shape] : undefined;\n query(rql, params, shapes);\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 {is_executing, result, error};\n}\n\n// Multiple query hook - returns multiple results\nexport function useQueryMany<S extends readonly ShapeNode[] = readonly ShapeNode[]>(\n rql: string,\n params?: any,\n shapes?: S,\n options?: QueryOptions\n): {\n is_executing: boolean;\n results: QueryResult<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n query\n } = useQueryExecutor<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>(options);\n\n useEffect(() => {\n query(rql, params, shapes);\n }, [rql, params, query]);\n\n return {is_executing, results, error};\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, ShapeNode} 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 execution_time_ms: number;\n rows_affected?: number;\n}\n\nexport interface CommandState<T = any> {\n is_executing: boolean;\n results: CommandResult<T>[] | undefined;\n error: string | undefined;\n execution_time: number | undefined;\n}\n\nexport interface CommandExecutorOptions {\n connection_config?: ConnectionConfig;\n}\n\nexport function useCommandExecutor<T = any>(options?: CommandExecutorOptions) {\n const {client} = useConnection(options?.connection_config);\n\n const [state, setState] = useState<CommandState<T>>({\n is_executing: false,\n results: undefined,\n error: undefined,\n execution_time: undefined,\n });\n\n const client_ref = useRef(client);\n client_ref.current = client;\n\n const is_mounted_ref = useRef(false);\n useEffect(() => {\n is_mounted_ref.current = true;\n return () => { is_mounted_ref.current = false; };\n }, []);\n\n const execution_id_ref = useRef(0);\n const pending_ref = useRef<{rql: string, params?: any, shapes?: readonly ShapeNode[]} | null>(null);\n\n const command = useCallback(\n (rql: string, params?: any, shapes?: readonly ShapeNode[]): Promise<void> => {\n const current_client = client_ref.current;\n\n if (!current_client) {\n pending_ref.current = {rql, params, shapes};\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n return Promise.resolve();\n }\n\n pending_ref.current = null;\n const this_execution = ++execution_id_ref.current;\n\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n\n const start_time = Date.now();\n\n return (async () => {\n try {\n const frame_results = await current_client.command(rql, params || null, shapes || []) || [];\n\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n\n const results: CommandResult<T>[] = frame_results.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const first_row = frame[0];\n let columns: Column[] = [];\n\n const has_value_objects = first_row && typeof first_row === 'object' &&\n Object.values(first_row).some(v => v && typeof v === 'object' && 'type' in v);\n\n if (has_value_objects) {\n columns = Object.keys(first_row).map((key) => {\n const value = first_row[key];\n const data_type = value?.type || 'Utf8';\n return {\n name: key,\n type: data_type,\n payload: [],\n };\n });\n } else {\n columns = Object.keys(first_row).map((key) => ({\n name: key,\n type: 'Utf8',\n payload: [],\n }));\n }\n\n return {\n columns,\n rows: frame as T[],\n execution_time_ms: execution_time,\n };\n } else {\n return {\n columns: [],\n rows: [],\n execution_time_ms: execution_time,\n rows_affected: typeof frame === 'number' ? frame : undefined,\n };\n }\n });\n\n if (!is_mounted_ref.current) return;\n setState({\n is_executing: false,\n results,\n error: undefined,\n execution_time,\n });\n } catch (err) {\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n let error_message = 'Command execution failed';\n\n if (err instanceof Error) {\n error_message = err.message;\n } else if (typeof err === 'string') {\n error_message = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n error_message = (err as { message: string }).message;\n }\n\n console.error('Command execution failed:', error_message);\n\n if (!is_mounted_ref.current) return;\n setState(prev => ({\n ...prev,\n is_executing: false,\n error: error_message,\n execution_time,\n }));\n\n }\n })();\n },\n []\n );\n\n useEffect(() => {\n if (client && pending_ref.current) {\n const {rql, params, shapes} = pending_ref.current;\n command(rql, params, shapes);\n }\n }, [client, command]);\n\n const cancel_command = useCallback(() => {\n execution_id_ref.current++;\n setState((prev) => ({\n ...prev,\n is_executing: false,\n error: 'Command cancelled',\n }));\n }, []);\n\n return {\n is_executing: state.is_executing,\n results: state.results,\n error: state.error,\n execution_time: state.execution_time,\n command,\n cancel_command,\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {ShapeNode, InferShape} 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 connection_config?: ConnectionConfig;\n}\n\n// Single command hook - returns a single result\nexport function useCommandOne<S extends ShapeNode = any>(\n rql: string,\n params?: any,\n shape?: S,\n options?: CommandOptions\n): {\n is_executing: boolean;\n result: CommandResult<S extends ShapeNode ? InferShape<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n command\n } = useCommandExecutor<S extends ShapeNode ? InferShape<S> : any>(options);\n\n useEffect(() => {\n // Pass shape as array for the executor\n const shapes = shape ? [shape] : undefined;\n command(rql, params, shapes);\n }, [rql, 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 {is_executing, result, error};\n}\n\n// Multiple command hook - returns multiple results\nexport function useCommandMany<S extends readonly ShapeNode[] = readonly ShapeNode[]>(\n rql: string,\n params?: any,\n shapes?: S,\n options?: CommandOptions\n): {\n is_executing: boolean;\n results: CommandResult<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n command\n } = useCommandExecutor<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>(options);\n\n useEffect(() => {\n command(rql, params, shapes);\n }, [rql, params, command]);\n\n return {is_executing, results, error};\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, ShapeNode} 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 execution_time_ms: number;\n rows_affected?: number;\n}\n\nexport interface AdminState<T = any> {\n is_executing: boolean;\n results: AdminResult<T>[] | undefined;\n error: string | undefined;\n execution_time: number | undefined;\n}\n\nexport interface AdminExecutorOptions {\n connection_config?: ConnectionConfig;\n}\n\nexport function useAdminExecutor<T = any>(options?: AdminExecutorOptions) {\n const {client} = useConnection(options?.connection_config);\n\n const [state, setState] = useState<AdminState<T>>({\n is_executing: false,\n results: undefined,\n error: undefined,\n execution_time: undefined,\n });\n\n // Stable refs so the callback never recreates\n const client_ref = useRef(client);\n client_ref.current = client;\n\n const is_mounted_ref = useRef(false);\n useEffect(() => {\n is_mounted_ref.current = true;\n return () => { is_mounted_ref.current = false; };\n }, []);\n\n // Counter to detect superseded executions\n const execution_id_ref = useRef(0);\n\n // Stash pending call if client isn't ready yet\n const pending_ref = useRef<{rql: string, params?: any, shapes?: readonly ShapeNode[]} | null>(null);\n\n const admin = useCallback(\n (rql: string, params?: any, shapes?: readonly ShapeNode[]): Promise<void> => {\n const current_client = client_ref.current;\n // If no client yet, stash the request for replay when client connects\n if (!current_client) {\n pending_ref.current = {rql, params, shapes};\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n return Promise.resolve();\n }\n\n pending_ref.current = null;\n const this_execution = ++execution_id_ref.current;\n\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n\n const start_time = Date.now();\n\n return (async () => {\n try {\n const frame_results = await current_client.admin(rql, params || null, shapes || []) || [];\n\n // If this execution was superseded by a newer one, discard results\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n\n // Process each frame into a AdminResult\n const results: AdminResult<T>[] = frame_results.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const first_row = frame[0];\n let columns: Column[] = [];\n\n // Check if we have Value objects or plain objects\n const has_value_objects = first_row && typeof first_row === 'object' &&\n Object.values(first_row).some(v => v && typeof v === 'object' && 'type' in v);\n\n if (has_value_objects) {\n columns = Object.keys(first_row).map((key) => {\n const value = first_row[key];\n const data_type = value?.type || 'Utf8';\n return {\n name: key,\n type: data_type,\n payload: [],\n };\n });\n } else {\n columns = Object.keys(first_row).map((key) => ({\n name: key,\n type: 'Utf8',\n payload: [],\n }));\n }\n\n return {\n columns,\n rows: frame as T[],\n execution_time_ms: execution_time,\n };\n } else {\n return {\n columns: [],\n rows: [],\n execution_time_ms: execution_time,\n rows_affected: typeof frame === 'number' ? frame : undefined,\n };\n }\n });\n\n if (!is_mounted_ref.current) return;\n setState({\n is_executing: false,\n results,\n error: undefined,\n execution_time,\n });\n } catch (err) {\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n let error_message = 'Admin execution failed';\n\n if (err instanceof Error) {\n error_message = err.message;\n } else if (typeof err === 'string') {\n error_message = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n error_message = (err as { message: string }).message;\n }\n\n console.error('Admin execution failed:', error_message);\n\n if (!is_mounted_ref.current) return;\n setState(prev => ({\n ...prev,\n is_executing: false,\n error: error_message,\n execution_time,\n }));\n\n }\n })();\n },\n [] // stable — never recreates\n );\n\n // Replay pending request when client becomes available\n useEffect(() => {\n if (client && pending_ref.current) {\n const {rql, params, shapes} = pending_ref.current;\n admin(rql, params, shapes);\n }\n }, [client, admin]);\n\n const cancel_admin = useCallback(() => {\n // Bump execution ID so any in-flight request is ignored on completion\n execution_id_ref.current++;\n setState((prev) => ({\n ...prev,\n is_executing: false,\n error: 'Admin cancelled',\n }));\n }, []);\n\n return {\n is_executing: state.is_executing,\n results: state.results,\n error: state.error,\n execution_time: state.execution_time,\n admin,\n cancel_admin,\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {ShapeNode, InferShape} 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 connection_config?: ConnectionConfig;\n}\n\n// Single admin hook - returns a single result\nexport function useAdminOne<S extends ShapeNode = any>(\n rql: string,\n params?: any,\n shape?: S,\n options?: AdminOptions\n): {\n is_executing: boolean;\n result: AdminResult<S extends ShapeNode ? InferShape<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n admin\n } = useAdminExecutor<S extends ShapeNode ? InferShape<S> : any>(options);\n\n useEffect(() => {\n // Pass shape as array for the executor\n const shapes = shape ? [shape] : undefined;\n admin(rql, params, shapes);\n }, [rql, 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 {is_executing, result, error};\n}\n\n// Multiple admin hook - returns multiple results\nexport function useAdminMany<S extends readonly ShapeNode[] = readonly ShapeNode[]>(\n rql: string,\n params?: any,\n shapes?: S,\n options?: AdminOptions\n): {\n is_executing: boolean;\n results: AdminResult<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n admin\n } = useAdminExecutor<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>(options);\n\n useEffect(() => {\n admin(rql, params, shapes);\n }, [rql, params, admin]);\n\n return {is_executing, results, error};\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { ShapeNode } from '@reifydb/core';\nimport type { SubscriptionConfig } from '@reifydb/client';\nimport { useConnection } from './use-connection';\nimport type { ConnectionConfig } from '../connection/connection';\n\nexport interface SubscriptionExecutorOptions {\n connection_config?: 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 is_subscribed: boolean;\n is_subscribing: boolean;\n error: string | undefined;\n subscription_id: string | undefined;\n}\n\nexport function useSubscriptionExecutor<T = any>(\n options?: SubscriptionExecutorOptions\n) {\n const { client } = useConnection(options?.connection_config);\n\n const [state, setState] = useState<SubscriptionState<T>>({\n data: [],\n changes: [],\n is_subscribed: false,\n is_subscribing: false,\n error: undefined,\n subscription_id: undefined\n });\n\n // Use a ref for client to avoid recreating callbacks when client changes\n const client_ref = useRef(client);\n\n const subscriptionIdRef = useRef<string | undefined>(undefined);\n const rql_ref = useRef<string | undefined>(undefined);\n const params_ref = useRef<any>(undefined);\n const shape_ref = useRef<ShapeNode | undefined>(undefined);\n const config_ref = useRef<SubscriptionConfig | undefined>(undefined);\n\n // Keep client_ref in sync with client\n useEffect(() => {\n client_ref.current = client;\n }, [client]);\n\n // Helper to add change event\n const add_change_event = useCallback((\n operation: 'INSERT' | 'UPDATE' | 'REMOVE',\n rows: T[]\n ) => {\n setState(prev => {\n const new_change: ChangeEvent<T> = {\n operation,\n rows,\n timestamp: Date.now()\n };\n\n const new_changes = [...prev.changes, new_change];\n\n return {\n ...prev,\n data: prev.data,\n changes: new_changes\n };\n });\n }, []);\n\n // Separate callbacks for each operation type\n const handle_insert = useCallback((rows: T[]) => {\n add_change_event('INSERT', rows);\n }, [add_change_event]);\n\n const handle_update = useCallback((rows: T[]) => {\n add_change_event('UPDATE', rows);\n }, [add_change_event]);\n\n const handle_remove = useCallback((rows: T[]) => {\n add_change_event('REMOVE', rows);\n }, [add_change_event]);\n\n const subscribe = useCallback(async (\n rql: string,\n params?: any,\n shape?: ShapeNode,\n config?: SubscriptionConfig\n ) => {\n const current_client = client_ref.current;\n if (!current_client) {\n setState(prev => ({ ...prev, error: 'Client not connected' }));\n return;\n }\n\n if (!('subscribe' in current_client)) {\n setState(prev => ({ ...prev, error: 'Subscriptions require a WebSocket connection' }));\n return;\n }\n\n // Store refs for reconnection\n rql_ref.current = rql;\n params_ref.current = params;\n shape_ref.current = shape;\n config_ref.current = config;\n\n setState(prev => ({\n ...prev,\n is_subscribing: true,\n error: undefined\n }));\n\n try {\n const sub_id = await current_client.subscribe(rql, params, shape, {\n on_insert: handle_insert,\n on_update: handle_update,\n on_remove: handle_remove\n }, config);\n\n subscriptionIdRef.current = sub_id;\n setState(prev => ({\n ...prev,\n is_subscribing: false,\n is_subscribed: true,\n subscription_id: sub_id\n }));\n } catch (err: any) {\n setState(prev => ({\n ...prev,\n is_subscribing: false,\n error: err.message || 'Subscription failed'\n }));\n }\n }, [handle_insert, handle_update, handle_remove]);\n\n const unsubscribe = useCallback(async () => {\n const current_client = client_ref.current;\n if (!current_client || !subscriptionIdRef.current) return;\n if (!('unsubscribe' in current_client)) return;\n\n try {\n await current_client.unsubscribe(subscriptionIdRef.current);\n subscriptionIdRef.current = undefined;\n rql_ref.current = undefined;\n params_ref.current = undefined;\n shape_ref.current = undefined;\n config_ref.current = undefined;\n\n setState(prev => ({\n ...prev,\n is_subscribed: false,\n subscription_id: undefined\n }));\n } catch (err: any) {\n setState(prev => ({\n ...prev,\n error: err.message || 'Unsubscribe failed'\n }));\n }\n }, []);\n\n const clear_changes = useCallback(() => {\n setState(prev => ({ ...prev, changes: [] }));\n }, []);\n\n const clear_data = useCallback(() => {\n setState(prev => ({ ...prev, data: [] }));\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (subscriptionIdRef.current && client_ref.current && 'unsubscribe' in client_ref.current) {\n client_ref.current.unsubscribe(subscriptionIdRef.current).catch(console.error);\n }\n };\n }, []);\n\n return {\n state,\n subscribe,\n unsubscribe,\n clear_changes,\n clear_data\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useEffect, useMemo } from 'react';\nimport { ShapeNode, InferShape } from '@reifydb/core';\nimport type { SubscriptionConfig } from '@reifydb/client';\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 config?: SubscriptionConfig;\n}\n\nexport function useSubscription<S extends ShapeNode = any>(\n rql: string,\n params?: any,\n shape?: S,\n options?: SubscriptionOptions\n): {\n data: InferShape<S>[];\n changes: ChangeEvent<InferShape<S>>[];\n is_subscribed: boolean;\n is_subscribing: boolean;\n error: string | undefined;\n subscription_id: string | undefined;\n} {\n const {\n state,\n subscribe,\n unsubscribe\n } = useSubscriptionExecutor<InferShape<S>>(options);\n\n // Serialize params for stable comparison (objects create new refs each render)\n const params_key = useMemo(() => JSON.stringify(params), [params]);\n const config_key = useMemo(() => JSON.stringify(options?.config), [options?.config]);\n\n useEffect(() => {\n if (options?.enabled === false) return;\n\n subscribe(rql, params, shape, options?.config);\n\n return () => {\n unsubscribe();\n };\n }, [rql, params_key, shape, config_key, options?.enabled, subscribe, unsubscribe]);\n\n return {\n data: state.data,\n changes: state.changes,\n is_subscribed: state.is_subscribed,\n is_subscribing: state.is_subscribing,\n error: state.error,\n subscription_id: state.subscription_id\n };\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport {useEffect, useState} from 'react';\nimport {Shape, InferShape} from '@reifydb/core';\nimport {useQueryExecutor} from './use-query-executor';\n\nexport interface ColumnInfo {\n name: string;\n data_type: string;\n}\n\nexport interface TableInfo {\n name: string;\n columns: ColumnInfo[];\n}\n\nconst namespace_shape = Shape.object({\n id: Shape.number(),\n name: Shape.string(),\n});\n\nconst table_shape = Shape.object({\n id: Shape.number(),\n namespace_id: Shape.number(),\n name: Shape.string(),\n primary_key_id: Shape.number(),\n});\n\nconst view_shape = Shape.object({\n id: Shape.number(),\n namespace_id: Shape.number(),\n name: Shape.string(),\n});\n\nconst column_shape = Shape.object({\n id: Shape.number(),\n shape_id: Shape.number(),\n shape_type: Shape.number(),\n name: Shape.string(),\n type: Shape.number(),\n position: Shape.number(),\n auto_increment: Shape.boolean(),\n});\n\ntype NamespaceRow = InferShape<typeof namespace_shape>;\ntype TableRow = InferShape<typeof table_shape>;\ntype ViewRow = InferShape<typeof view_shape>;\ntype ColumnRow = InferShape<typeof column_shape>;\n\nexport function useShape(): [boolean, TableInfo[], string | undefined] {\n const {is_executing, results, error, query} = useQueryExecutor();\n const [shape, set_shape] = useState<TableInfo[]>([]);\n const [is_loading, set_is_loading] = useState(true);\n\n useEffect(() => {\n if (!query) return;\n\n const fetch_shape = async () => {\n set_is_loading(true);\n\n try {\n await query(\n `OUTPUT FROM system::namespaces; OUTPUT FROM system::tables; OUTPUT FROM system::views; OUTPUT FROM system::columns;`,\n undefined,\n [namespace_shape, table_shape, view_shape, column_shape]\n );\n } catch (err) {\n console.error('Failed to fetch shape:', err);\n }\n };\n\n fetch_shape();\n }, [query]);\n\n useEffect(() => {\n if (!results || results.length < 4) {\n set_is_loading(is_executing);\n return;\n }\n\n const tables_result = results[1];\n const views_result = results[2];\n const columns_result = results[3];\n\n if (!tables_result?.rows || !views_result?.rows || !columns_result?.rows) {\n set_is_loading(false);\n return;\n }\n\n const namespaces_result = results[0];\n const namespaces = namespaces_result.rows as unknown as NamespaceRow[];\n const tables = tables_result.rows as unknown as TableRow[];\n const views = views_result.rows as unknown as ViewRow[];\n const columns = columns_result.rows as unknown as ColumnRow[];\n\n const namespace_map = 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 namespace_map.set(id, name);\n }\n });\n\n const table_info_map = new Map<number, TableInfo>();\n\n tables.forEach((table) => {\n const table_id = table.id?.valueOf() as number;\n const namespace_id = table.namespace_id?.valueOf() as number;\n const table_name = table.name?.valueOf() as string;\n\n if (table_id === undefined || !table_name || namespace_id === undefined) return;\n\n const namespace = namespace_map.get(namespace_id);\n if (!namespace) return;\n\n const full_table_name = `${namespace}::${table_name}`;\n\n table_info_map.set(table_id, {\n name: full_table_name,\n columns: [],\n });\n });\n\n views.forEach((view) => {\n const view_id = view.id?.valueOf() as number;\n const namespace_id = view.namespace_id?.valueOf() as number;\n const view_name = view.name?.valueOf() as string;\n\n if (view_id === undefined || !view_name || namespace_id === undefined) return;\n\n const namespace = namespace_map.get(namespace_id);\n if (!namespace) return;\n\n const full_view_name = `${namespace}::${view_name}`;\n\n table_info_map.set(view_id, {\n name: full_view_name,\n columns: [],\n });\n });\n\n const type_map: 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 table_columns_map = new Map<number, Array<{name: string; data_type: string; position: number}>>();\n\n columns.forEach((column) => {\n const shape_id = column.shape_id?.valueOf() as number;\n const shape_type = column.shape_type?.valueOf() as number;\n const column_name = column.name?.valueOf() as string;\n const type_id = column.type?.valueOf() as number;\n const position = column.position?.valueOf() as number;\n\n if (shape_id === undefined || !column_name || type_id === undefined) return;\n if (shape_type !== 0 && shape_type !== 1) return;\n\n if (!table_columns_map.has(shape_id)) {\n table_columns_map.set(shape_id, []);\n }\n\n table_columns_map.get(shape_id)!.push({\n name: column_name,\n data_type: type_map[type_id] || `Unknown(${type_id})`,\n position: position ?? 0,\n });\n });\n\n // Sort columns by position and add to table info\n table_columns_map.forEach((cols, shape_id) => {\n const table_info = table_info_map.get(shape_id);\n if (table_info) {\n cols.sort((a, b) => a.position - b.position);\n table_info.columns = cols.map((c) => ({name: c.name, data_type: c.data_type}));\n }\n });\n\n const shape_array = Array.from(table_info_map.values())\n .filter((table) => table.name !== 'reifydb::flows')\n .sort((a, b) => a.name.localeCompare(b.name));\n\n set_shape(shape_array);\n set_is_loading(false);\n }, [results, is_executing]);\n\n return [is_loading, shape, 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-shape.ts"],"sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 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 {get_connection, clear_connection} 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 {useShape, type TableInfo, type ColumnInfo} from './hooks/use-shape';","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport {Client, WsClient, HttpClient, JsonHttpClient, JsonWsClient, type WsClientOptions} from '@reifydb/client';\n\ninterface ConnectionState {\n client: WsClient | HttpClient | JsonHttpClient | JsonWsClient | null;\n is_connected: boolean;\n is_connecting: boolean;\n connection_error: 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: {timeout_ms: 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 is_connected: false,\n is_connecting: false,\n connection_error: null,\n listeners: new Set(),\n };\n private config: ConnectionConfig;\n private connect_promise: Promise<void> | null = null;\n\n constructor(config: ConnectionConfig = DEFAULT_CONFIG) {\n this.config = {...DEFAULT_CONFIG, ...config};\n }\n\n set_config(config: ConnectionConfig): void {\n this.config = config;\n }\n\n get_config(): ConnectionConfig {\n return this.config;\n }\n\n async connect(url?: string, options?: Omit<WsClientOptions, 'url'>): Promise<void> {\n if (this.state.is_connected) {\n return;\n }\n\n // If already connecting, wait for the in-flight connection\n if (this.connect_promise) {\n return this.connect_promise;\n }\n\n const connect_url = url || this.config.url || DEFAULT_CONFIG.url!;\n const connect_options = {token: this.config.token, ...this.config.options, ...options};\n\n this.update_state({\n is_connecting: true,\n connection_error: null,\n });\n\n this.connect_promise = (async () => {\n try {\n const isHttp = connect_url.startsWith('http://') || connect_url.startsWith('https://');\n const isJson = this.config.format === 'json';\n let client: WsClient | HttpClient | JsonHttpClient | JsonWsClient;\n if (isHttp) {\n client = isJson\n ? Client.connect_json_http(connect_url, connect_options)\n : Client.connect_http(connect_url, connect_options);\n } else {\n client = isJson\n ? await Client.connect_json_ws(connect_url, connect_options)\n : await Client.connect_ws(connect_url, connect_options);\n }\n this.update_state({\n client,\n is_connected: true,\n is_connecting: false,\n connection_error: null,\n });\n } catch (err) {\n const error_message = err instanceof Error ? err.message : 'Failed to connect to ReifyDB';\n console.error('[Connection] Connection failed:', error_message, err);\n this.update_state({\n client: null,\n is_connected: false,\n is_connecting: false,\n connection_error: error_message,\n });\n throw err;\n } finally {\n this.connect_promise = null;\n }\n })();\n\n return this.connect_promise;\n }\n\n async disconnect(): Promise<void> {\n this.connect_promise = null;\n if (this.state.client) {\n try {\n if ('disconnect' in this.state.client) {\n await (this.state.client as WsClient).disconnect();\n }\n } catch (err) {\n console.error('Error disconnecting:', err);\n }\n }\n\n this.update_state({\n client: null,\n is_connected: false,\n is_connecting: false,\n connection_error: 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 get_client(): WsClient | HttpClient | JsonHttpClient | JsonWsClient | null {\n return this.state.client;\n }\n\n is_connected(): boolean {\n return this.state.is_connected;\n }\n\n is_connecting(): boolean {\n return this.state.is_connecting;\n }\n\n get_connection_error(): string | null {\n return this.state.connection_error;\n }\n\n get_state(): 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 update_state(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) 2026 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 default_connection: 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 set_config().\n * @param config - Optional connection configuration\n * @returns The singleton Connection instance\n */\nexport function get_connection(config?: ConnectionConfig): Connection {\n // Create singleton on first call\n if (!default_connection) {\n const merged_config = {...DEFAULT_CONFIG, ...config};\n default_connection = new Connection(merged_config);\n // Start connection immediately - don't wait for React's useEffect\n default_connection.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 default_connection.set_config({...DEFAULT_CONFIG, ...config});\n }\n\n return default_connection;\n}\n\n/**\n * Clear the singleton connection\n */\nexport async function clear_connection(): Promise<void> {\n if (default_connection) {\n await default_connection.disconnect();\n default_connection = null;\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport React, { createContext, useEffect, useRef, ReactNode } from 'react';\nimport { Connection, ConnectionConfig } from './connection';\nimport { get_connection } 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 set_config()\n const connection = get_connection(config);\n\n // Track previous config to detect changes\n const prev_config_ref = useRef<string | undefined>(undefined);\n const current_config_str = JSON.stringify(config);\n\n useEffect(() => {\n const config_changed = prev_config_ref.current !== undefined &&\n prev_config_ref.current !== current_config_str;\n\n if (config_changed && connection.is_connected()) {\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.is_connected() && !connection.is_connecting()) {\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 prev_config_ref.current = current_config_str;\n }, [current_config_str, connection]);\n\n return (\n <ConnectionContext.Provider value={connection}>\n {children}\n </ConnectionContext.Provider>\n );\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport {useContext, useEffect, useState} from 'react';\nimport {ConnectionConfig} from '../connection/connection';\nimport {get_connection} from '../connection/connection-pool';\nimport {ConnectionContext} from '../connection/connection-context';\nimport {WsClient, HttpClient, JsonHttpClient, JsonWsClient} from '@reifydb/client';\n\ninterface ConnectionState {\n client: WsClient | HttpClient | JsonHttpClient | JsonWsClient | null;\n is_connected: boolean;\n is_connecting: boolean;\n connection_error: string | null;\n}\n\nexport function useConnection(override_config?: ConnectionConfig) {\n const context_connection = useContext(ConnectionContext);\n\n // Use override config if provided, otherwise use context, otherwise get default\n const [connection] = useState(() => {\n if (override_config) {\n return get_connection(override_config);\n }\n if (context_connection) {\n return context_connection;\n }\n return get_connection();\n });\n\n const [state, setState] = useState<ConnectionState>(() => connection.get_state());\n\n useEffect(() => {\n // Get initial state immediately\n const current_state = connection.get_state();\n setState(current_state);\n\n // Subscribe to connection state changes\n const unsubscribe = connection.subscribe((new_state) => {\n setState({\n client: new_state.client,\n is_connected: new_state.is_connected,\n is_connecting: new_state.is_connecting,\n connection_error: new_state.connection_error,\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) 2026 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, ShapeNode} 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 execution_time_ms: number;\n rows_affected?: number;\n}\n\nexport interface QueryState<T = any> {\n is_executing: boolean;\n results: QueryResult<T>[] | undefined;\n error: string | undefined;\n execution_time: number | undefined;\n}\n\nexport interface QueryExecutorOptions {\n connection_config?: ConnectionConfig;\n}\n\nexport function useQueryExecutor<T = any>(options?: QueryExecutorOptions) {\n const {client} = useConnection(options?.connection_config);\n\n const [state, setState] = useState<QueryState<T>>({\n is_executing: false,\n results: undefined,\n error: undefined,\n execution_time: undefined,\n });\n\n const client_ref = useRef(client);\n client_ref.current = client;\n\n const is_mounted_ref = useRef(true);\n useEffect(() => {\n return () => { is_mounted_ref.current = false; };\n }, []);\n\n const execution_id_ref = useRef(0);\n const pending_ref = useRef<{rql: string, params?: any, shapes?: readonly ShapeNode[]} | null>(null);\n\n const query = useCallback(\n (rql: string, params?: any, shapes?: readonly ShapeNode[]): Promise<void> => {\n const current_client = client_ref.current;\n\n if (!current_client) {\n pending_ref.current = {rql, params, shapes};\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n return Promise.resolve();\n }\n\n pending_ref.current = null;\n const this_execution = ++execution_id_ref.current;\n\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n\n const start_time = Date.now();\n\n return (async () => {\n try {\n const frame_results = await current_client.query(rql, params || null, shapes || []) || [];\n\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n\n const results: QueryResult<T>[] = frame_results.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const first_row = frame[0];\n let columns: Column[] = [];\n\n const has_value_objects = first_row && typeof first_row === 'object' &&\n Object.values(first_row).some(v => v && typeof v === 'object' && 'type' in v);\n\n if (has_value_objects) {\n columns = Object.keys(first_row).map((key) => {\n const value = first_row[key];\n const data_type = value?.type || 'Utf8';\n return {\n name: key,\n type: data_type,\n payload: [],\n };\n });\n } else {\n columns = Object.keys(first_row).map((key) => ({\n name: key,\n type: 'Utf8',\n payload: [],\n }));\n }\n\n return {\n columns,\n rows: frame as T[],\n execution_time_ms: execution_time,\n };\n } else {\n return {\n columns: [],\n rows: [],\n execution_time_ms: execution_time,\n };\n }\n });\n\n if (!is_mounted_ref.current) return;\n setState({\n is_executing: false,\n results,\n error: undefined,\n execution_time,\n });\n } catch (err) {\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n let error_message = 'Query execution failed';\n\n if (err instanceof Error) {\n error_message = err.message;\n } else if (typeof err === 'string') {\n error_message = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n error_message = (err as { message: string }).message;\n }\n\n console.error('Query execution failed:', error_message);\n\n if (!is_mounted_ref.current) return;\n setState(prev => ({\n ...prev,\n is_executing: false,\n error: error_message,\n execution_time,\n }));\n\n }\n })();\n },\n []\n );\n\n useEffect(() => {\n if (client && pending_ref.current) {\n const {rql, params, shapes} = pending_ref.current;\n query(rql, params, shapes);\n }\n }, [client, query]);\n\n const cancel_query = useCallback(() => {\n execution_id_ref.current++;\n setState((prev) => ({\n ...prev,\n is_executing: false,\n error: 'Query cancelled',\n }));\n }, []);\n\n return {\n is_executing: state.is_executing,\n results: state.results,\n error: state.error,\n execution_time: state.execution_time,\n query,\n cancel_query,\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {ShapeNode, InferShape} 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 connection_config?: ConnectionConfig;\n}\n\n// Single query hook - returns a single result\nexport function useQueryOne<S extends ShapeNode = any>(\n rql: string,\n params?: any,\n shape?: S,\n options?: QueryOptions\n): {\n is_executing: boolean;\n result: QueryResult<S extends ShapeNode ? InferShape<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n query\n } = useQueryExecutor<S extends ShapeNode ? InferShape<S> : any>(options);\n\n useEffect(() => {\n // Pass shape as array for the executor\n const shapes = shape ? [shape] : undefined;\n query(rql, params, shapes);\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 {is_executing, result, error};\n}\n\n// Multiple query hook - returns multiple results\nexport function useQueryMany<S extends readonly ShapeNode[] = readonly ShapeNode[]>(\n rql: string,\n params?: any,\n shapes?: S,\n options?: QueryOptions\n): {\n is_executing: boolean;\n results: QueryResult<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n query\n } = useQueryExecutor<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>(options);\n\n useEffect(() => {\n query(rql, params, shapes);\n }, [rql, params, query]);\n\n return {is_executing, results, error};\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, ShapeNode} 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 execution_time_ms: number;\n rows_affected?: number;\n}\n\nexport interface CommandState<T = any> {\n is_executing: boolean;\n results: CommandResult<T>[] | undefined;\n error: string | undefined;\n execution_time: number | undefined;\n}\n\nexport interface CommandExecutorOptions {\n connection_config?: ConnectionConfig;\n}\n\nexport function useCommandExecutor<T = any>(options?: CommandExecutorOptions) {\n const {client} = useConnection(options?.connection_config);\n\n const [state, setState] = useState<CommandState<T>>({\n is_executing: false,\n results: undefined,\n error: undefined,\n execution_time: undefined,\n });\n\n const client_ref = useRef(client);\n client_ref.current = client;\n\n const is_mounted_ref = useRef(false);\n useEffect(() => {\n is_mounted_ref.current = true;\n return () => { is_mounted_ref.current = false; };\n }, []);\n\n const execution_id_ref = useRef(0);\n const pending_ref = useRef<{rql: string, params?: any, shapes?: readonly ShapeNode[]} | null>(null);\n\n const command = useCallback(\n (rql: string, params?: any, shapes?: readonly ShapeNode[]): Promise<void> => {\n const current_client = client_ref.current;\n\n if (!current_client) {\n pending_ref.current = {rql, params, shapes};\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n return Promise.resolve();\n }\n\n pending_ref.current = null;\n const this_execution = ++execution_id_ref.current;\n\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n\n const start_time = Date.now();\n\n return (async () => {\n try {\n const frame_results = await current_client.command(rql, params || null, shapes || []) || [];\n\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n\n const results: CommandResult<T>[] = frame_results.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const first_row = frame[0];\n let columns: Column[] = [];\n\n const has_value_objects = first_row && typeof first_row === 'object' &&\n Object.values(first_row).some(v => v && typeof v === 'object' && 'type' in v);\n\n if (has_value_objects) {\n columns = Object.keys(first_row).map((key) => {\n const value = first_row[key];\n const data_type = value?.type || 'Utf8';\n return {\n name: key,\n type: data_type,\n payload: [],\n };\n });\n } else {\n columns = Object.keys(first_row).map((key) => ({\n name: key,\n type: 'Utf8',\n payload: [],\n }));\n }\n\n return {\n columns,\n rows: frame as T[],\n execution_time_ms: execution_time,\n };\n } else {\n return {\n columns: [],\n rows: [],\n execution_time_ms: execution_time,\n rows_affected: typeof frame === 'number' ? frame : undefined,\n };\n }\n });\n\n if (!is_mounted_ref.current) return;\n setState({\n is_executing: false,\n results,\n error: undefined,\n execution_time,\n });\n } catch (err) {\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n let error_message = 'Command execution failed';\n\n if (err instanceof Error) {\n error_message = err.message;\n } else if (typeof err === 'string') {\n error_message = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n error_message = (err as { message: string }).message;\n }\n\n console.error('Command execution failed:', error_message);\n\n if (!is_mounted_ref.current) return;\n setState(prev => ({\n ...prev,\n is_executing: false,\n error: error_message,\n execution_time,\n }));\n\n }\n })();\n },\n []\n );\n\n useEffect(() => {\n if (client && pending_ref.current) {\n const {rql, params, shapes} = pending_ref.current;\n command(rql, params, shapes);\n }\n }, [client, command]);\n\n const cancel_command = useCallback(() => {\n execution_id_ref.current++;\n setState((prev) => ({\n ...prev,\n is_executing: false,\n error: 'Command cancelled',\n }));\n }, []);\n\n return {\n is_executing: state.is_executing,\n results: state.results,\n error: state.error,\n execution_time: state.execution_time,\n command,\n cancel_command,\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {ShapeNode, InferShape} 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 connection_config?: ConnectionConfig;\n}\n\n// Single command hook - returns a single result\nexport function useCommandOne<S extends ShapeNode = any>(\n rql: string,\n params?: any,\n shape?: S,\n options?: CommandOptions\n): {\n is_executing: boolean;\n result: CommandResult<S extends ShapeNode ? InferShape<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n command\n } = useCommandExecutor<S extends ShapeNode ? InferShape<S> : any>(options);\n\n useEffect(() => {\n // Pass shape as array for the executor\n const shapes = shape ? [shape] : undefined;\n command(rql, params, shapes);\n }, [rql, 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 {is_executing, result, error};\n}\n\n// Multiple command hook - returns multiple results\nexport function useCommandMany<S extends readonly ShapeNode[] = readonly ShapeNode[]>(\n rql: string,\n params?: any,\n shapes?: S,\n options?: CommandOptions\n): {\n is_executing: boolean;\n results: CommandResult<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n command\n } = useCommandExecutor<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>(options);\n\n useEffect(() => {\n command(rql, params, shapes);\n }, [rql, params, command]);\n\n return {is_executing, results, error};\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport {useState, useCallback, useRef, useEffect} from 'react';\nimport {Column, ShapeNode} 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 execution_time_ms: number;\n rows_affected?: number;\n}\n\nexport interface AdminState<T = any> {\n is_executing: boolean;\n results: AdminResult<T>[] | undefined;\n error: string | undefined;\n execution_time: number | undefined;\n}\n\nexport interface AdminExecutorOptions {\n connection_config?: ConnectionConfig;\n}\n\nexport function useAdminExecutor<T = any>(options?: AdminExecutorOptions) {\n const {client} = useConnection(options?.connection_config);\n\n const [state, setState] = useState<AdminState<T>>({\n is_executing: false,\n results: undefined,\n error: undefined,\n execution_time: undefined,\n });\n\n // Stable refs so the callback never recreates\n const client_ref = useRef(client);\n client_ref.current = client;\n\n const is_mounted_ref = useRef(false);\n useEffect(() => {\n is_mounted_ref.current = true;\n return () => { is_mounted_ref.current = false; };\n }, []);\n\n // Counter to detect superseded executions\n const execution_id_ref = useRef(0);\n\n // Stash pending call if client isn't ready yet\n const pending_ref = useRef<{rql: string, params?: any, shapes?: readonly ShapeNode[]} | null>(null);\n\n const admin = useCallback(\n (rql: string, params?: any, shapes?: readonly ShapeNode[]): Promise<void> => {\n const current_client = client_ref.current;\n // If no client yet, stash the request for replay when client connects\n if (!current_client) {\n pending_ref.current = {rql, params, shapes};\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n return Promise.resolve();\n }\n\n pending_ref.current = null;\n const this_execution = ++execution_id_ref.current;\n\n setState(prev => ({...prev, is_executing: true, error: undefined}));\n\n const start_time = Date.now();\n\n return (async () => {\n try {\n const frame_results = await current_client.admin(rql, params || null, shapes || []) || [];\n\n // If this execution was superseded by a newer one, discard results\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n\n // Process each frame into a AdminResult\n const results: AdminResult<T>[] = frame_results.map((frame: any) => {\n if (Array.isArray(frame) && frame.length > 0) {\n const first_row = frame[0];\n let columns: Column[] = [];\n\n // Check if we have Value objects or plain objects\n const has_value_objects = first_row && typeof first_row === 'object' &&\n Object.values(first_row).some(v => v && typeof v === 'object' && 'type' in v);\n\n if (has_value_objects) {\n columns = Object.keys(first_row).map((key) => {\n const value = first_row[key];\n const data_type = value?.type || 'Utf8';\n return {\n name: key,\n type: data_type,\n payload: [],\n };\n });\n } else {\n columns = Object.keys(first_row).map((key) => ({\n name: key,\n type: 'Utf8',\n payload: [],\n }));\n }\n\n return {\n columns,\n rows: frame as T[],\n execution_time_ms: execution_time,\n };\n } else {\n return {\n columns: [],\n rows: [],\n execution_time_ms: execution_time,\n rows_affected: typeof frame === 'number' ? frame : undefined,\n };\n }\n });\n\n if (!is_mounted_ref.current) return;\n setState({\n is_executing: false,\n results,\n error: undefined,\n execution_time,\n });\n } catch (err) {\n if (execution_id_ref.current !== this_execution) return;\n\n const execution_time = Date.now() - start_time;\n let error_message = 'Admin execution failed';\n\n if (err instanceof Error) {\n error_message = err.message;\n } else if (typeof err === 'string') {\n error_message = err;\n } else if (err && typeof err === 'object' && 'message' in err) {\n error_message = (err as { message: string }).message;\n }\n\n console.error('Admin execution failed:', error_message);\n\n if (!is_mounted_ref.current) return;\n setState(prev => ({\n ...prev,\n is_executing: false,\n error: error_message,\n execution_time,\n }));\n\n }\n })();\n },\n [] // stable — never recreates\n );\n\n // Replay pending request when client becomes available\n useEffect(() => {\n if (client && pending_ref.current) {\n const {rql, params, shapes} = pending_ref.current;\n admin(rql, params, shapes);\n }\n }, [client, admin]);\n\n const cancel_admin = useCallback(() => {\n // Bump execution ID so any in-flight request is ignored on completion\n execution_id_ref.current++;\n setState((prev) => ({\n ...prev,\n is_executing: false,\n error: 'Admin cancelled',\n }));\n }, []);\n\n return {\n is_executing: state.is_executing,\n results: state.results,\n error: state.error,\n execution_time: state.execution_time,\n admin,\n cancel_admin,\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport {useEffect, useMemo} from 'react';\nimport {ShapeNode, InferShape} 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 connection_config?: ConnectionConfig;\n}\n\n// Single admin hook - returns a single result\nexport function useAdminOne<S extends ShapeNode = any>(\n rql: string,\n params?: any,\n shape?: S,\n options?: AdminOptions\n): {\n is_executing: boolean;\n result: AdminResult<S extends ShapeNode ? InferShape<S> : any> | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n admin\n } = useAdminExecutor<S extends ShapeNode ? InferShape<S> : any>(options);\n\n useEffect(() => {\n // Pass shape as array for the executor\n const shapes = shape ? [shape] : undefined;\n admin(rql, params, shapes);\n }, [rql, 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 {is_executing, result, error};\n}\n\n// Multiple admin hook - returns multiple results\nexport function useAdminMany<S extends readonly ShapeNode[] = readonly ShapeNode[]>(\n rql: string,\n params?: any,\n shapes?: S,\n options?: AdminOptions\n): {\n is_executing: boolean;\n results: AdminResult<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>[] | undefined;\n error: string | undefined;\n} {\n const {\n is_executing,\n results,\n error,\n admin\n } = useAdminExecutor<S extends readonly ShapeNode[] ? InferShape<S[number]> : any>(options);\n\n useEffect(() => {\n admin(rql, params, shapes);\n }, [rql, params, admin]);\n\n return {is_executing, results, error};\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { ShapeNode } from '@reifydb/core';\nimport type { SubscriptionConfig } from '@reifydb/client';\nimport { useConnection } from './use-connection';\nimport type { ConnectionConfig } from '../connection/connection';\n\nexport interface SubscriptionExecutorOptions {\n connection_config?: 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 is_subscribed: boolean;\n is_subscribing: boolean;\n error: string | undefined;\n subscription_id: string | undefined;\n}\n\nexport function useSubscriptionExecutor<T = any>(\n options?: SubscriptionExecutorOptions\n) {\n const { client } = useConnection(options?.connection_config);\n\n const [state, setState] = useState<SubscriptionState<T>>({\n data: [],\n changes: [],\n is_subscribed: false,\n is_subscribing: false,\n error: undefined,\n subscription_id: undefined\n });\n\n // Use a ref for client to avoid recreating callbacks when client changes\n const client_ref = useRef(client);\n\n const subscriptionIdRef = useRef<string | undefined>(undefined);\n const rql_ref = useRef<string | undefined>(undefined);\n const params_ref = useRef<any>(undefined);\n const shape_ref = useRef<ShapeNode | undefined>(undefined);\n const config_ref = useRef<SubscriptionConfig | undefined>(undefined);\n\n // Keep client_ref in sync with client\n useEffect(() => {\n client_ref.current = client;\n }, [client]);\n\n // Helper to add change event\n const add_change_event = useCallback((\n operation: 'INSERT' | 'UPDATE' | 'REMOVE',\n rows: T[]\n ) => {\n setState(prev => {\n const new_change: ChangeEvent<T> = {\n operation,\n rows,\n timestamp: Date.now()\n };\n\n const new_changes = [...prev.changes, new_change];\n\n return {\n ...prev,\n data: prev.data,\n changes: new_changes\n };\n });\n }, []);\n\n // Separate callbacks for each operation type\n const handle_insert = useCallback((rows: T[]) => {\n add_change_event('INSERT', rows);\n }, [add_change_event]);\n\n const handle_update = useCallback((rows: T[]) => {\n add_change_event('UPDATE', rows);\n }, [add_change_event]);\n\n const handle_remove = useCallback((rows: T[]) => {\n add_change_event('REMOVE', rows);\n }, [add_change_event]);\n\n const subscribe = useCallback(async (\n rql: string,\n params?: any,\n shape?: ShapeNode,\n config?: SubscriptionConfig\n ) => {\n const current_client = client_ref.current;\n if (!current_client) {\n setState(prev => ({ ...prev, error: 'Client not connected' }));\n return;\n }\n\n if (!('subscribe' in current_client)) {\n setState(prev => ({ ...prev, error: 'Subscriptions require a WebSocket connection' }));\n return;\n }\n\n // Store refs for reconnection\n rql_ref.current = rql;\n params_ref.current = params;\n shape_ref.current = shape;\n config_ref.current = config;\n\n setState(prev => ({\n ...prev,\n is_subscribing: true,\n error: undefined\n }));\n\n try {\n const sub_id = await current_client.subscribe(rql, params, shape, {\n on_insert: handle_insert,\n on_update: handle_update,\n on_remove: handle_remove\n }, config);\n\n subscriptionIdRef.current = sub_id;\n setState(prev => ({\n ...prev,\n is_subscribing: false,\n is_subscribed: true,\n subscription_id: sub_id\n }));\n } catch (err: any) {\n setState(prev => ({\n ...prev,\n is_subscribing: false,\n error: err.message || 'Subscription failed'\n }));\n }\n }, [handle_insert, handle_update, handle_remove]);\n\n const unsubscribe = useCallback(async () => {\n const current_client = client_ref.current;\n if (!current_client || !subscriptionIdRef.current) return;\n if (!('unsubscribe' in current_client)) return;\n\n try {\n await current_client.unsubscribe(subscriptionIdRef.current);\n subscriptionIdRef.current = undefined;\n rql_ref.current = undefined;\n params_ref.current = undefined;\n shape_ref.current = undefined;\n config_ref.current = undefined;\n\n setState(prev => ({\n ...prev,\n is_subscribed: false,\n subscription_id: undefined\n }));\n } catch (err: any) {\n setState(prev => ({\n ...prev,\n error: err.message || 'Unsubscribe failed'\n }));\n }\n }, []);\n\n const clear_changes = useCallback(() => {\n setState(prev => ({ ...prev, changes: [] }));\n }, []);\n\n const clear_data = useCallback(() => {\n setState(prev => ({ ...prev, data: [] }));\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (subscriptionIdRef.current && client_ref.current && 'unsubscribe' in client_ref.current) {\n client_ref.current.unsubscribe(subscriptionIdRef.current).catch(console.error);\n }\n };\n }, []);\n\n return {\n state,\n subscribe,\n unsubscribe,\n clear_changes,\n clear_data\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport { useEffect, useMemo } from 'react';\nimport { ShapeNode, InferShape } from '@reifydb/core';\nimport type { SubscriptionConfig } from '@reifydb/client';\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 config?: SubscriptionConfig;\n}\n\nexport function useSubscription<S extends ShapeNode = any>(\n rql: string,\n params?: any,\n shape?: S,\n options?: SubscriptionOptions\n): {\n data: InferShape<S>[];\n changes: ChangeEvent<InferShape<S>>[];\n is_subscribed: boolean;\n is_subscribing: boolean;\n error: string | undefined;\n subscription_id: string | undefined;\n} {\n const {\n state,\n subscribe,\n unsubscribe\n } = useSubscriptionExecutor<InferShape<S>>(options);\n\n // Serialize params for stable comparison (objects create new refs each render)\n const params_key = useMemo(() => JSON.stringify(params), [params]);\n const config_key = useMemo(() => JSON.stringify(options?.config), [options?.config]);\n\n useEffect(() => {\n if (options?.enabled === false) return;\n\n subscribe(rql, params, shape, options?.config);\n\n return () => {\n unsubscribe();\n };\n }, [rql, params_key, shape, config_key, options?.enabled, subscribe, unsubscribe]);\n\n return {\n data: state.data,\n changes: state.changes,\n is_subscribed: state.is_subscribed,\n is_subscribing: state.is_subscribing,\n error: state.error,\n subscription_id: state.subscription_id\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 ReifyDB\n\nimport {useEffect, useState} from 'react';\nimport {Shape, InferShape} from '@reifydb/core';\nimport {useQueryExecutor} from './use-query-executor';\n\nexport interface ColumnInfo {\n name: string;\n data_type: string;\n}\n\nexport interface TableInfo {\n name: string;\n columns: ColumnInfo[];\n}\n\nconst namespace_shape = Shape.object({\n id: Shape.number(),\n name: Shape.string(),\n});\n\nconst table_shape = Shape.object({\n id: Shape.number(),\n namespace_id: Shape.number(),\n name: Shape.string(),\n primary_key_id: Shape.number(),\n});\n\nconst view_shape = Shape.object({\n id: Shape.number(),\n namespace_id: Shape.number(),\n name: Shape.string(),\n});\n\nconst column_shape = Shape.object({\n id: Shape.number(),\n shape_id: Shape.number(),\n shape_type: Shape.number(),\n name: Shape.string(),\n type: Shape.number(),\n position: Shape.number(),\n auto_increment: Shape.boolean(),\n});\n\ntype NamespaceRow = InferShape<typeof namespace_shape>;\ntype TableRow = InferShape<typeof table_shape>;\ntype ViewRow = InferShape<typeof view_shape>;\ntype ColumnRow = InferShape<typeof column_shape>;\n\nfunction to_number(value: unknown): number | undefined {\n if (value === undefined || value === null) return undefined;\n const n = Number(value);\n return Number.isNaN(n) ? undefined : n;\n}\n\nexport function useShape(): [boolean, TableInfo[], string | undefined] {\n const {is_executing, results, error, query} = useQueryExecutor();\n const [shape, set_shape] = useState<TableInfo[]>([]);\n const [is_loading, set_is_loading] = useState(true);\n\n useEffect(() => {\n if (!query) return;\n\n const fetch_shape = async () => {\n set_is_loading(true);\n\n try {\n await query(\n `OUTPUT FROM system::namespaces; OUTPUT FROM system::tables; OUTPUT FROM system::views; OUTPUT FROM system::columns;`,\n undefined,\n [namespace_shape, table_shape, view_shape, column_shape]\n );\n } catch (err) {\n console.error('Failed to fetch shape:', err);\n }\n };\n\n fetch_shape();\n }, [query]);\n\n useEffect(() => {\n if (!results || results.length < 4) {\n set_is_loading(is_executing);\n return;\n }\n\n const tables_result = results[1];\n const views_result = results[2];\n const columns_result = results[3];\n\n if (!tables_result?.rows || !views_result?.rows || !columns_result?.rows) {\n set_is_loading(false);\n return;\n }\n\n const namespaces_result = results[0];\n const namespaces = namespaces_result.rows as unknown as NamespaceRow[];\n const tables = tables_result.rows as unknown as TableRow[];\n const views = views_result.rows as unknown as ViewRow[];\n const columns = columns_result.rows as unknown as ColumnRow[];\n\n const namespace_map = new Map<number, string>();\n namespaces.forEach((ns) => {\n const id = to_number(ns.id);\n const name = ns.name?.valueOf() as string;\n if (id !== undefined && name) {\n namespace_map.set(id, name);\n }\n });\n\n const table_info_map = new Map<number, TableInfo>();\n\n tables.forEach((table) => {\n const table_id = to_number(table.id);\n const namespace_id = to_number(table.namespace_id);\n const table_name = table.name?.valueOf() as string;\n\n if (table_id === undefined || !table_name || namespace_id === undefined) return;\n\n const namespace = namespace_map.get(namespace_id);\n if (!namespace) return;\n\n const full_table_name = `${namespace}::${table_name}`;\n\n table_info_map.set(table_id, {\n name: full_table_name,\n columns: [],\n });\n });\n\n views.forEach((view) => {\n const view_id = to_number(view.id);\n const namespace_id = to_number(view.namespace_id);\n const view_name = view.name?.valueOf() as string;\n\n if (view_id === undefined || !view_name || namespace_id === undefined) return;\n\n const namespace = namespace_map.get(namespace_id);\n if (!namespace) return;\n\n const full_view_name = `${namespace}::${view_name}`;\n\n table_info_map.set(view_id, {\n name: full_view_name,\n columns: [],\n });\n });\n\n const type_map: 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 table_columns_map = new Map<number, Array<{name: string; data_type: string; position: number}>>();\n\n columns.forEach((column) => {\n const shape_id = to_number(column.shape_id);\n const shape_type = to_number(column.shape_type);\n const column_name = column.name?.valueOf() as string;\n const type_id = to_number(column.type);\n const position = to_number(column.position);\n\n if (shape_id === undefined || !column_name || type_id === undefined) return;\n if (shape_type !== 0 && shape_type !== 1) return;\n\n if (!table_columns_map.has(shape_id)) {\n table_columns_map.set(shape_id, []);\n }\n\n table_columns_map.get(shape_id)!.push({\n name: column_name,\n data_type: type_map[type_id] || `Unknown(${type_id})`,\n position: position ?? 0,\n });\n });\n\n // Sort columns by position and add to table info\n table_columns_map.forEach((cols, shape_id) => {\n const table_info = table_info_map.get(shape_id);\n if (table_info) {\n cols.sort((a, b) => a.position - b.position);\n table_info.columns = cols.map((c) => ({name: c.name, data_type: c.data_type}));\n }\n });\n\n const shape_array = Array.from(table_info_map.values())\n .filter((table) => table.name !== 'reifydb::flows')\n .sort((a, b) => a.name.localeCompare(b.name));\n\n set_shape(shape_array);\n set_is_loading(false);\n }, [results, is_executing]);\n\n return [is_loading, shape, 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/license.md CHANGED
@@ -1,16 +1,21 @@
1
- # License
1
+ MIT License
2
2
 
3
- Copyright 2025 ReifyDB
3
+ Copyright (c) 2026 ReifyDB
4
4
 
5
- Licensed under the Apache License, Version 2.0 (the "License");
6
- you may not use this file except in compliance with the License.
7
- You may obtain a copy of the License at
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
8
11
 
9
- http://www.apache.org/licenses/LICENSE-2.0
10
-
11
- Unless required by applicable law or agreed to in writing, software
12
- distributed under the License is distributed on an "AS IS" BASIS,
13
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- See the License for the specific language governing permissions and
15
- limitations under the License.
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
16
14
 
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@reifydb/react",
3
- "version": "0.5.6",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "dependencies": {
8
- "@reifydb/client": "0.5.6",
9
- "@reifydb/core": "0.5.6"
8
+ "@reifydb/core": "0.6.0",
9
+ "@reifydb/client": "0.6.0"
10
10
  },
11
11
  "peerDependencies": {
12
12
  "react": ">=16.8.0"
@@ -37,7 +37,7 @@
37
37
  "access": "public",
38
38
  "linkWorkspacePackages": false
39
39
  },
40
- "license": "Apache-2.0",
40
+ "license": "MIT",
41
41
  "scripts": {
42
42
  "build": "tsup src/index.ts --dts --format esm --sourcemap",
43
43
  "dev": "tsc --watch",