@reifydb/react 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -2
- package/dist/index.js +14 -14
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -226,6 +226,6 @@ interface TableInfo {
|
|
|
226
226
|
name: string;
|
|
227
227
|
columns: ColumnInfo[];
|
|
228
228
|
}
|
|
229
|
-
declare function
|
|
229
|
+
declare function useCatalog(): [boolean, TableInfo[], string | undefined];
|
|
230
230
|
|
|
231
|
-
export { type AdminExecutorOptions, type AdminOptions, type AdminResult, type AdminState, type ChangeEvent, type ColumnInfo, type CommandExecutorOptions, type CommandOptions, type CommandResult, type CommandState, Connection, type ConnectionConfig, ConnectionContext, ConnectionProvider, type ConnectionProviderProps, DEFAULT_CONFIG, DEFAULT_URL, type QueryExecutorOptions, type QueryOptions, type QueryResult, type QueryState, type SubscriptionExecutorOptions, type SubscriptionOptions, type SubscriptionState, type TableInfo, clear_connection, get_connection, useAdminExecutor, useAdminMany, useAdminOne, useCommandExecutor, useCommandMany, useCommandOne, useConnection, useQueryExecutor, useQueryMany, useQueryOne,
|
|
231
|
+
export { type AdminExecutorOptions, type AdminOptions, type AdminResult, type AdminState, type ChangeEvent, type ColumnInfo, type CommandExecutorOptions, type CommandOptions, type CommandResult, type CommandState, Connection, type ConnectionConfig, ConnectionContext, ConnectionProvider, type ConnectionProviderProps, DEFAULT_CONFIG, DEFAULT_URL, type QueryExecutorOptions, type QueryOptions, type QueryResult, type QueryState, type SubscriptionExecutorOptions, type SubscriptionOptions, type SubscriptionState, type TableInfo, clear_connection, get_connection, useAdminExecutor, useAdminMany, useAdminOne, useCatalog, useCommandExecutor, useCommandMany, useCommandOne, useConnection, useQueryExecutor, useQueryMany, useQueryOne, useSubscription, useSubscriptionExecutor };
|
package/dist/index.js
CHANGED
|
@@ -843,7 +843,7 @@ function useSubscription(rql, params, shape, options) {
|
|
|
843
843
|
};
|
|
844
844
|
}
|
|
845
845
|
|
|
846
|
-
// src/hooks/use-
|
|
846
|
+
// src/hooks/use-catalog.ts
|
|
847
847
|
import { useEffect as useEffect11, useState as useState6 } from "react";
|
|
848
848
|
import { Shape } from "@reifydb/core";
|
|
849
849
|
import { type_name_from_code } from "@reifydb/client";
|
|
@@ -864,8 +864,8 @@ var view_shape = Shape.object({
|
|
|
864
864
|
});
|
|
865
865
|
var column_shape = Shape.object({
|
|
866
866
|
id: Shape.number(),
|
|
867
|
-
|
|
868
|
-
|
|
867
|
+
object_id: Shape.number(),
|
|
868
|
+
object_type: Shape.number(),
|
|
869
869
|
name: Shape.string(),
|
|
870
870
|
type: Shape.number(),
|
|
871
871
|
position: Shape.number(),
|
|
@@ -876,7 +876,7 @@ function to_number(value) {
|
|
|
876
876
|
const n = Number(value);
|
|
877
877
|
return Number.isNaN(n) ? void 0 : n;
|
|
878
878
|
}
|
|
879
|
-
function
|
|
879
|
+
function useCatalog() {
|
|
880
880
|
const { is_executing, results, error, query } = useQueryExecutor();
|
|
881
881
|
const [shape, set_shape] = useState6([]);
|
|
882
882
|
const [is_loading, set_is_loading] = useState6(true);
|
|
@@ -950,15 +950,15 @@ function useShape() {
|
|
|
950
950
|
});
|
|
951
951
|
const table_columns_map = /* @__PURE__ */ new Map();
|
|
952
952
|
columns.forEach((column) => {
|
|
953
|
-
const
|
|
954
|
-
const
|
|
953
|
+
const object_id = to_number(column.object_id);
|
|
954
|
+
const object_type = to_number(column.object_type);
|
|
955
955
|
const column_name = column.name?.valueOf();
|
|
956
956
|
const type_id = to_number(column.type);
|
|
957
957
|
const position = to_number(column.position);
|
|
958
|
-
if (
|
|
959
|
-
if (
|
|
960
|
-
if (!table_columns_map.has(
|
|
961
|
-
table_columns_map.set(
|
|
958
|
+
if (object_id === void 0 || !column_name || type_id === void 0) return;
|
|
959
|
+
if (object_type !== 0 && object_type !== 1) return;
|
|
960
|
+
if (!table_columns_map.has(object_id)) {
|
|
961
|
+
table_columns_map.set(object_id, []);
|
|
962
962
|
}
|
|
963
963
|
let data_type;
|
|
964
964
|
try {
|
|
@@ -966,14 +966,14 @@ function useShape() {
|
|
|
966
966
|
} catch {
|
|
967
967
|
data_type = `Unknown(${type_id})`;
|
|
968
968
|
}
|
|
969
|
-
table_columns_map.get(
|
|
969
|
+
table_columns_map.get(object_id).push({
|
|
970
970
|
name: column_name,
|
|
971
971
|
data_type,
|
|
972
972
|
position: position ?? 0
|
|
973
973
|
});
|
|
974
974
|
});
|
|
975
|
-
table_columns_map.forEach((cols,
|
|
976
|
-
const table_info = table_info_map.get(
|
|
975
|
+
table_columns_map.forEach((cols, object_id) => {
|
|
976
|
+
const table_info = table_info_map.get(object_id);
|
|
977
977
|
if (table_info) {
|
|
978
978
|
cols.sort((a, b) => a.position - b.position);
|
|
979
979
|
table_info.columns = cols.map((c) => ({ name: c.name, data_type: c.data_type }));
|
|
@@ -996,6 +996,7 @@ export {
|
|
|
996
996
|
useAdminExecutor,
|
|
997
997
|
useAdminMany,
|
|
998
998
|
useAdminOne,
|
|
999
|
+
useCatalog,
|
|
999
1000
|
useCommandExecutor,
|
|
1000
1001
|
useCommandMany,
|
|
1001
1002
|
useCommandOne,
|
|
@@ -1003,7 +1004,6 @@ export {
|
|
|
1003
1004
|
useQueryExecutor,
|
|
1004
1005
|
useQueryMany,
|
|
1005
1006
|
useQueryOne,
|
|
1006
|
-
useShape,
|
|
1007
1007
|
useSubscription,
|
|
1008
1008
|
useSubscriptionExecutor
|
|
1009
1009
|
};
|
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) 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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nimport {useEffect, useState} from 'react';\nimport {Shape, InferShape} from '@reifydb/core';\nimport {type_name_from_code} from '@reifydb/client';\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 // 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 let data_type: string;\n try {\n data_type = type_name_from_code(type_id);\n } catch {\n data_type = `Unknown(${type_id})`;\n }\n\n table_columns_map.get(shape_id)!.push({\n name: column_name,\n data_type,\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-catalog.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\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 {useCatalog, type TableInfo, type ColumnInfo} from './hooks/use-catalog';","// SPDX-License-Identifier: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\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: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nimport {useEffect, useState} from 'react';\nimport {Shape, InferShape} from '@reifydb/core';\nimport {type_name_from_code} from '@reifydb/client';\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 object_id: Shape.number(),\n object_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 useCatalog(): [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 // 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 object_id = to_number(column.object_id);\n const object_type = to_number(column.object_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 (object_id === undefined || !column_name || type_id === undefined) return;\n if (object_type !== 0 && object_type !== 1) return;\n\n if (!table_columns_map.has(object_id)) {\n table_columns_map.set(object_id, []);\n }\n\n let data_type: string;\n try {\n data_type = type_name_from_code(type_id);\n } catch {\n data_type = `Unknown(${type_id})`;\n }\n\n table_columns_map.get(object_id)!.push({\n name: column_name,\n data_type,\n position: position ?? 0,\n });\n });\n\n // Sort columns by position and add to table info\n table_columns_map.forEach((cols, object_id) => {\n const table_info = table_info_map.get(object_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/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reifydb/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@reifydb/core": "0.
|
|
9
|
-
"@reifydb/client": "0.
|
|
8
|
+
"@reifydb/core": "0.9.0",
|
|
9
|
+
"@reifydb/client": "0.9.0"
|
|
10
10
|
},
|
|
11
11
|
"peerDependencies": {
|
|
12
12
|
"react": ">=16.8.0"
|