{"version":3,"sources":["../src/context.tsx","../src/provider.tsx","../src/hooks/use-do.ts","../src/hooks/use-$.ts","../src/hooks/use-collection.ts","../src/hooks/use-live-query.ts","../src/hooks/use-record.ts","../src/hooks/use-connection-state.ts"],"names":["React","React2","createClient","jsx","React3","React4","React5","React6","React7"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Dotdo React Context\n *\n * Provides client instance and connection management to child components.\n * This is the internal context used by all hooks.\n *\n * @module @dotdo/react\n */\n\nimport * as React from 'react'\nimport type { DotdoContextValue } from './types'\n\n/**\n * React context for dotdo client.\n *\n * Use the DO provider to set this context, and useDotdoContext to read it.\n */\nexport const DotdoContext = React.createContext<DotdoContextValue | null>(null)\n\n/**\n * Hook to access the dotdo context.\n *\n * Provides access to the client, namespace, and connection management.\n * Usually you don't need this directly - use the specific hooks instead.\n *\n * @returns The context value with client and connection info\n * @throws Error if used outside of DO provider\n */\nexport function useDotdoContext(): DotdoContextValue {\n  const context = React.useContext(DotdoContext)\n  if (!context) {\n    throw new Error('useDotdoContext must be used within a DO provider')\n  }\n  return context\n}\n","/**\n * DO - React provider for dotdo client\n *\n * Wraps your application to provide client instance and WebSocket\n * connection management for all hooks within the tree.\n *\n * @example\n * ```tsx\n * import { DO } from '@dotdo/react'\n *\n * function App() {\n *   return (\n *     <DO ns=\"https://api.example.com.ai/do/workspace\">\n *       <MyApp />\n *     </DO>\n *   )\n * }\n * ```\n *\n * @example\n * With custom client configuration:\n * ```tsx\n * import { DO } from '@dotdo/react'\n *\n * function App() {\n *   return (\n *     <DO\n *       ns=\"https://api.example.com.ai/do/workspace\"\n *       config={{\n *         timeout: 30000,\n *         auth: { token: 'my-auth-token' },\n *       }}\n *     >\n *       <MyApp />\n *     </DO>\n *   )\n * }\n * ```\n *\n * @module @dotdo/react\n */\n\nimport * as React from 'react'\nimport { createClient, type ClientConfig } from '@dotdo/client'\nimport { DotdoContext } from './context'\nimport type { DotdoContextValue, ReactDotdoClient } from './types'\n\n/**\n * Props for the DO provider component.\n */\nexport interface DOProps {\n  /** Namespace URL for the Durable Object (http/https, will convert to ws/wss for sync) */\n  ns: string\n  /** Optional client configuration for timeout, auth, batching, etc. */\n  config?: ClientConfig\n  /** Child components */\n  children: React.ReactNode\n}\n\n/**\n * Provider component for dotdo React bindings.\n *\n * Creates and manages the client instance and WebSocket connections\n * for real-time sync with Durable Objects. All hooks in the tree\n * will use this provider's client and connection state.\n *\n * @param props - Provider props\n * @returns React element wrapping children with context\n */\nexport function DO({ ns, config, children }: DOProps): React.ReactElement {\n  // Create client instance\n  const clientRef = React.useRef<ReactDotdoClient | null>(null)\n\n  // Lazily initialize client\n  if (!clientRef.current) {\n    clientRef.current = createClient(ns, config) as ReactDotdoClient\n  }\n\n  // Track WebSocket connections by collection\n  const connectionsRef = React.useRef<Map<string, WebSocket>>(new Map())\n\n  // Get or create connection for a collection\n  const getConnection = React.useCallback((collection: string, branch?: string): WebSocket | null => {\n    const key = branch ? `${collection}:${branch}` : collection\n    return connectionsRef.current.get(key) ?? null\n  }, [])\n\n  // Cleanup on unmount\n  React.useEffect(() => {\n    return () => {\n      // Close all WebSocket connections\n      for (const ws of connectionsRef.current.values()) {\n        ws.close()\n      }\n      connectionsRef.current.clear()\n\n      // Disconnect the client if it supports it\n      if (clientRef.current?.disconnect) {\n        clientRef.current.disconnect()\n      }\n    }\n  }, [])\n\n  // Memoize context value\n  const value = React.useMemo<DotdoContextValue>(() => ({\n    ns,\n    client: clientRef.current,\n    connections: connectionsRef.current,\n    getConnection,\n  }), [ns, getConnection])\n\n  return (\n    <DotdoContext.Provider value={value}>\n      {children}\n    </DotdoContext.Provider>\n  )\n}\n","/**\n * useDO - Direct Durable Object access hook\n *\n * Provides type-safe access to the Durable Object client\n * with RPC methods and real-time subscriptions.\n *\n * @example\n * ```tsx\n * import { useDO } from '@dotdo/react'\n *\n * interface WorkspaceAPI {\n *   Task: {\n *     create(data: TaskInput): Promise<Task>\n *     list(): Promise<Task[]>\n *     update(id: string, data: Partial<Task>): Promise<Task>\n *     delete(id: string): Promise<void>\n *   }\n *   User: {\n *     me(): Promise<User>\n *   }\n * }\n *\n * function TaskManager() {\n *   const workspace = useDO<WorkspaceAPI>()\n *\n *   const handleCreate = async () => {\n *     // Type-safe RPC with promise pipelining\n *     const task = await workspace.Task.create({ title: 'New Task' })\n *   }\n *\n *   return <button onClick={handleCreate}>Create Task</button>\n * }\n * ```\n *\n * @module @dotdo/react\n */\n\nimport type { DOClient } from '@dotdo/client'\nimport { useDotdoContext } from '../context'\n\n/**\n * Hook to access the Durable Object with type-safe RPC.\n *\n * Use this for direct RPC calls with full type safety and promise pipelining.\n * The client supports Cap'n Proto-style promise pipelining where multiple\n * chained calls execute in a single network round trip.\n *\n * @typeParam TMethods - The API interface for the Durable Object\n * @typeParam TEvents - Event types for subscriptions (optional)\n * @returns Typed DOClient instance\n * @throws Error if used outside of DO provider\n *\n * @example\n * ```tsx\n * // Define your API types\n * interface API {\n *   Task: {\n *     create(data: TaskInput): Promise<Task>\n *     list(): Promise<Task[]>\n *   }\n * }\n *\n * // Use with type safety\n * const client = useDO<API>()\n * const tasks = await client.Task.list()\n * ```\n */\nexport function useDO<TMethods = unknown, TEvents = unknown>(): DOClient<TMethods, TEvents> {\n  const { client } = useDotdoContext()\n\n  if (!client) {\n    throw new Error('Client not initialized. Ensure DO provider is properly configured.')\n  }\n\n  return client as DOClient<TMethods, TEvents>\n}\n","/**\n * use$ - Workflow context hook\n *\n * Provides access to the dotdo workflow context ($) for\n * durable operations, event handlers, and scheduling.\n *\n * @example\n * ```tsx\n * import { use$ } from '@dotdo/react'\n *\n * function TaskActions({ taskId }: { taskId: string }) {\n *   const $ = use$()\n *\n *   const handleComplete = async () => {\n *     // Durable operation with retries\n *     await $.do(async () => {\n *       await $.Task(taskId).complete()\n *       await $.notify.user('Task completed!')\n *     })\n *   }\n *\n *   const handleScheduleReminder = async () => {\n *     // Schedule a future action\n *     await $.in('1 hour').remind.task(taskId)\n *   }\n *\n *   return (\n *     <div>\n *       <button onClick={handleComplete}>Complete</button>\n *       <button onClick={handleScheduleReminder}>Remind Later</button>\n *     </div>\n *   )\n * }\n * ```\n */\n\nimport * as React from 'react'\nimport type { DOClient } from '@dotdo/client'\nimport { useDotdoContext } from '../context'\n\n/**\n * Workflow context interface\n * Mirrors the server-side $ context for client-side operations\n */\nexport interface WorkflowContext {\n  /** Fire-and-forget event */\n  send: <T>(event: T) => void\n  /** Single attempt operation */\n  try: <T>(action: () => Promise<T>) => Promise<T>\n  /** Durable operation with retries */\n  do: <T>(action: () => Promise<T>) => Promise<T>\n  /** Schedule an action for later */\n  in: (delay: string | number) => WorkflowContext\n  /** Access to underlying client for direct RPC */\n  client: DOClient<unknown, unknown>\n  /** Dynamic property access for Noun.verb pattern */\n  [key: string]: unknown\n}\n\n/**\n * Hook to access the workflow context ($).\n *\n * Provides a client-side mirror of the server-side $ context\n * for durable operations and scheduling.\n *\n * @returns WorkflowContext instance\n * @throws Error if used outside of DotdoProvider\n */\nexport function use$(): WorkflowContext {\n  const { client, ns } = useDotdoContext()\n\n  if (!client) {\n    throw new Error('Client not initialized. Ensure DO provider is properly configured.')\n  }\n\n  // Create the workflow context\n  const $ = React.useMemo(() => {\n    const rpcUrl = ns + '/rpc'\n\n    const rpc = async (method: string, args: unknown[]): Promise<unknown> => {\n      const response = await fetch(rpcUrl, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({\n          id: crypto.randomUUID(),\n          type: 'call',\n          calls: [{\n            promiseId: 'p-1',\n            target: { type: 'root' },\n            method,\n            args: args.map(arg => ({ type: 'value', value: arg })),\n          }],\n        }),\n      })\n\n      if (!response.ok) {\n        throw new Error(`HTTP error: ${response.status}`)\n      }\n\n      const result = await response.json()\n      if (result.error) {\n        throw new Error(result.error.message)\n      }\n\n      return result.results?.[0]?.value\n    }\n\n    const context: WorkflowContext = {\n      client: client as DOClient<unknown, unknown>,\n\n      send: <T>(event: T) => {\n        // Fire-and-forget via RPC\n        rpc('$.send', [event]).catch(() => {\n          // Silently ignore errors for fire-and-forget\n        })\n      },\n\n      try: async <T>(action: () => Promise<T>): Promise<T> => {\n        // Execute action with single attempt\n        return action()\n      },\n\n      do: async <T>(action: () => Promise<T>): Promise<T> => {\n        // Execute via server-side $.do for durability\n        // For client-side, we just execute directly\n        // Real durability comes from server-side workflows\n        return action()\n      },\n\n      in: (delay: string | number) => {\n        // Create a scheduled context\n        const scheduledContext = { ...context }\n        // The actual scheduling happens server-side\n        // This returns a proxy that will send the scheduled call\n        return new Proxy(scheduledContext, {\n          get(_target, prop) {\n            if (typeof prop === 'string') {\n              return (...args: unknown[]) => {\n                return rpc('$.schedule', [{ delay, method: prop, args }])\n              }\n            }\n            return undefined\n          },\n        }) as WorkflowContext\n      },\n    }\n\n    // Create a proxy for dynamic Noun.verb access\n    return new Proxy(context, {\n      get(target, prop) {\n        // Return known properties\n        if (prop in target) {\n          return target[prop as keyof WorkflowContext]\n        }\n\n        // For unknown properties, create a Noun proxy\n        if (typeof prop === 'string') {\n          return (id?: string) => {\n            const nounPath = id ? `${prop}(${id})` : prop\n            return new Proxy({}, {\n              get(_nounTarget, verb) {\n                if (typeof verb === 'string') {\n                  return (...args: unknown[]) => {\n                    return rpc(`${nounPath}.${verb}`, args)\n                  }\n                }\n                return undefined\n              },\n            })\n          }\n        }\n\n        return undefined\n      },\n    }) as WorkflowContext\n  }, [client, ns])\n\n  return $\n}\n","/**\n * useCollection - Real-time collection sync hook\n *\n * Connects to a Durable Object via WebSocket and provides reactive data\n * with optimistic mutations.\n *\n * @example\n * ```tsx\n * import { useCollection } from '@dotdo/react'\n *\n * function TaskList() {\n *   const { data: tasks, isLoading, insert, update, delete: remove } = useCollection<Task>({\n *     collection: 'Task',\n *   })\n *\n *   if (isLoading) return <Loading />\n *\n *   return (\n *     <ul>\n *       {tasks.map(task => (\n *         <li key={task.$id}>\n *           {task.title}\n *           <button onClick={() => update(task.$id, { done: true })}>Done</button>\n *           <button onClick={() => remove(task.$id)}>Delete</button>\n *         </li>\n *       ))}\n *     </ul>\n *   )\n * }\n * ```\n *\n * @module @dotdo/react\n */\n\nimport * as React from 'react'\nimport { useDotdoContext } from '../context'\nimport type { BaseItem, CollectionConfig, SyncMessage, UseDotdoCollectionResult } from '../types'\n\n/**\n * Hook for managing a collection with real-time sync.\n *\n * Connects to a Durable Object via WebSocket and provides reactive data\n * with optimistic mutations.\n *\n * @param config - Collection configuration\n * @returns Collection state and mutation methods\n */\nexport function useCollection<T extends BaseItem>(\n  config: CollectionConfig<T>\n): UseDotdoCollectionResult<T> {\n  const { ns, connections } = useDotdoContext()\n  const { collection, branch } = config\n\n  // State\n  const [data, setData] = React.useState<T[]>([])\n  const [isLoading, setIsLoading] = React.useState(true)\n  const [error, setError] = React.useState<Error | null>(null)\n  const [txid, setTxid] = React.useState(0)\n  const [pendingMutations, setPendingMutations] = React.useState(0)\n\n  // Refs for stable callbacks - avoids re-render dependencies\n  const dataRef = React.useRef<T[]>(data)\n  dataRef.current = data\n\n  // Optimistic updates store\n  const optimisticRef = React.useRef<Map<string, { type: 'insert' | 'update' | 'delete'; item: T | Partial<T> }>>(new Map())\n\n  // WebSocket ref\n  const wsRef = React.useRef<WebSocket | null>(null)\n\n  // Connection key\n  const connectionKey = branch ? `${collection}:${branch}` : collection\n\n  // Derive URLs - memoized to prevent re-computation\n  const wsUrl = React.useMemo(() => {\n    return ns.replace(/^https?:/, (m) => m === 'https:' ? 'wss:' : 'ws:') + '/sync'\n  }, [ns])\n\n  const rpcUrl = React.useMemo(() => {\n    return ns + '/rpc'\n  }, [ns])\n\n  // Connect to WebSocket\n  const connect = React.useCallback(() => {\n    if (wsRef.current?.readyState === WebSocket.OPEN) return\n\n    const ws = new WebSocket(wsUrl)\n    wsRef.current = ws\n    connections.set(connectionKey, ws)\n\n    ws.addEventListener('open', () => {\n      // Subscribe to collection\n      const subscribeMsg: Record<string, string> = {\n        type: 'subscribe',\n        collection,\n      }\n      if (branch) {\n        subscribeMsg.branch = branch\n      }\n      ws.send(JSON.stringify(subscribeMsg))\n    })\n\n    ws.addEventListener('message', (event: MessageEvent) => {\n      try {\n        const msg = JSON.parse(event.data) as SyncMessage<T>\n\n        if (msg.type === 'initial') {\n          setData(msg.data as T[])\n          setTxid(msg.txid)\n          setIsLoading(false)\n          setError(null)\n        } else if (msg.type === 'insert') {\n          const newItem = msg.data as T\n          setData(prev => [...prev, newItem])\n          setTxid(msg.txid)\n        } else if (msg.type === 'update') {\n          const updatedItem = msg.data as T\n          setData(prev => prev.map(item =>\n            item.$id === (msg.key ?? updatedItem.$id) ? updatedItem : item\n          ))\n          setTxid(msg.txid)\n        } else if (msg.type === 'delete') {\n          const keyToDelete = msg.key\n          setData(prev => prev.filter(item => item.$id !== keyToDelete))\n          setTxid(msg.txid)\n        }\n      } catch {\n        // Silently ignore malformed messages\n      }\n    })\n\n    ws.addEventListener('close', () => {\n      connections.delete(connectionKey)\n      // Schedule reconnection\n      setTimeout(() => {\n        if (!wsRef.current || wsRef.current.readyState === WebSocket.CLOSED) {\n          connect()\n        }\n      }, 1000)\n    })\n\n    ws.addEventListener('error', () => {\n      setError(new Error('WebSocket connection error'))\n    })\n  }, [wsUrl, collection, branch, connectionKey, connections])\n\n  // Initialize connection\n  React.useEffect(() => {\n    connect()\n\n    return () => {\n      if (wsRef.current) {\n        wsRef.current.close()\n        wsRef.current = null\n      }\n      connections.delete(connectionKey)\n    }\n  }, [connect, connectionKey, connections])\n\n  // RPC helper - stable reference, doesn't depend on changing state\n  const rpc = React.useCallback(async (method: string, args: unknown): Promise<unknown> => {\n    const response = await fetch(rpcUrl, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        id: crypto.randomUUID(),\n        type: 'call',\n        calls: [{\n          promiseId: 'p-1',\n          target: { type: 'root' },\n          method: `${collection}.${method}`,\n          args: [{ type: 'value', value: args }],\n        }],\n      }),\n    })\n\n    if (!response.ok) {\n      throw new Error(`HTTP error: ${response.status}`)\n    }\n\n    const result = await response.json()\n    if (result.error) {\n      throw new Error(result.error.message)\n    }\n\n    return result.results?.[0]?.value\n  }, [rpcUrl, collection])\n\n  // Insert mutation with optimistic update - stable reference\n  const insert = React.useCallback(async (item: T): Promise<void> => {\n    // Optimistic update\n    setData(prev => [...prev, item])\n    setPendingMutations(p => p + 1)\n    optimisticRef.current.set(item.$id, { type: 'insert', item })\n\n    try {\n      await rpc('create', item)\n      optimisticRef.current.delete(item.$id)\n    } catch (err) {\n      // Rollback on failure\n      setData(prev => prev.filter(i => i.$id !== item.$id))\n      optimisticRef.current.delete(item.$id)\n      throw err\n    } finally {\n      setPendingMutations(p => Math.max(0, p - 1))\n    }\n  }, [rpc])\n\n  // Update mutation with optimistic update - uses ref to avoid data dependency\n  const update = React.useCallback(async (id: string, changes: Partial<T>): Promise<void> => {\n    // Use ref to get current data without causing re-renders\n    const original = dataRef.current.find(item => item.$id === id)\n    if (!original) return\n\n    // Optimistic update\n    setData(prev => prev.map(item =>\n      item.$id === id ? { ...item, ...changes } : item\n    ))\n    setPendingMutations(p => p + 1)\n    optimisticRef.current.set(id, { type: 'update', item: original })\n\n    try {\n      await rpc('update', { key: id, ...changes })\n      optimisticRef.current.delete(id)\n    } catch (err) {\n      // Rollback on failure\n      setData(prev => prev.map(item =>\n        item.$id === id ? original : item\n      ))\n      optimisticRef.current.delete(id)\n      throw err\n    } finally {\n      setPendingMutations(p => Math.max(0, p - 1))\n    }\n  }, [rpc])\n\n  // Delete mutation with optimistic update - uses ref to avoid data dependency\n  const deleteItem = React.useCallback(async (id: string): Promise<void> => {\n    // Use ref to get current data without causing re-renders\n    const original = dataRef.current.find(item => item.$id === id)\n    if (!original) return\n\n    // Optimistic update\n    setData(prev => prev.filter(item => item.$id !== id))\n    setPendingMutations(p => p + 1)\n    optimisticRef.current.set(id, { type: 'delete', item: original })\n\n    try {\n      await rpc('delete', { key: id })\n      optimisticRef.current.delete(id)\n    } catch (err) {\n      // Rollback on failure\n      setData(prev => [...prev, original])\n      optimisticRef.current.delete(id)\n      throw err\n    } finally {\n      setPendingMutations(p => Math.max(0, p - 1))\n    }\n  }, [rpc])\n\n  // Refetch - reconnect to get fresh data\n  const refetch = React.useCallback(() => {\n    setIsLoading(true)\n    if (wsRef.current) {\n      wsRef.current.close()\n    }\n    connect()\n  }, [connect])\n\n  // Memoize the return value to prevent unnecessary re-renders in consumers\n  return React.useMemo(() => ({\n    data,\n    isLoading,\n    error,\n    txid,\n    pendingMutations,\n    insert,\n    update,\n    delete: deleteItem,\n    refetch,\n  }), [data, isLoading, error, txid, pendingMutations, insert, update, deleteItem, refetch])\n}\n","/**\n * useLiveQuery - Reactive queries over collection data\n *\n * Filters, joins, and transforms collection data reactively.\n * Updates automatically when the source data changes.\n *\n * @example\n * ```tsx\n * import { useCollection, useLiveQuery } from '@dotdo/react'\n *\n * function TaskBoard() {\n *   const { data: tasks } = useCollection<Task>({ collection: 'Task' })\n *   const { data: users } = useCollection<User>({ collection: 'User' })\n *\n *   // Simple filter - memoize config to prevent re-renders\n *   const todoConfig = React.useMemo(() => ({\n *     from: 'Task',\n *     where: { status: 'todo' },\n *     orderBy: 'createdAt' as const,\n *     order: 'desc' as const,\n *   }), [])\n *   const todoTasks = useLiveQuery(tasks, todoConfig)\n *\n *   // With joins - memoize the join config\n *   const joinConfig = React.useMemo(() => ({\n *     from: 'Task',\n *     join: {\n *       assignee: {\n *         from: users,\n *         on: (task: Task, user: User) => task.assigneeId === user.$id,\n *         type: 'left' as const,\n *       },\n *     },\n *   }), [users])\n *   const tasksWithAssignees = useLiveQuery(tasks, joinConfig)\n * }\n * ```\n *\n * @remarks\n * For optimal performance, memoize the config object to prevent unnecessary\n * re-computations. The hook uses the config reference for dependency tracking.\n *\n * @module @dotdo/react\n */\n\nimport * as React from 'react'\nimport type { BaseItem, LiveQueryConfig } from '../types'\n\n/**\n * Execute a live query over collection data.\n *\n * Pure function that applies filtering, joining, ordering, and pagination\n * to the source data.\n */\nfunction executeQuery<T extends BaseItem, R = T>(\n  data: T[],\n  config: LiveQueryConfig<T, unknown>\n): R[] {\n  let result = [...data]\n\n  // Apply where filter\n  if (config.where) {\n    if (typeof config.where === 'function') {\n      result = result.filter(config.where as (item: T) => boolean)\n    } else {\n      const whereObj = config.where as Partial<T>\n      result = result.filter(item => {\n        for (const [key, value] of Object.entries(whereObj)) {\n          if (item[key] !== value) return false\n        }\n        return true\n      })\n    }\n  }\n\n  // Apply joins\n  if (config.join) {\n    const joinedResults: R[] = []\n\n    for (const item of result) {\n      const joinedItem: Record<string, unknown> = { ...item }\n      let includeItem = true\n\n      for (const [joinKey, joinConfig] of Object.entries(config.join)) {\n        const { from: joinData, on, type = 'left' } = joinConfig as {\n          from: BaseItem[]\n          on: (item: T, joinItem: BaseItem) => boolean\n          type?: 'left' | 'inner'\n        }\n\n        const matchedJoin = joinData.find(joinItem => on(item, joinItem))\n\n        if (type === 'inner' && !matchedJoin) {\n          includeItem = false\n          break\n        }\n\n        joinedItem[joinKey] = matchedJoin ?? null\n      }\n\n      if (!includeItem) continue\n\n      // For joins, restructure to { task: {...}, assignee: {...}, project: {...} }\n      const structured: Record<string, unknown> = {}\n      const itemKey = config.from.toLowerCase()\n      structured[itemKey] = item\n\n      for (const [joinKey] of Object.entries(config.join)) {\n        structured[joinKey] = joinedItem[joinKey]\n      }\n\n      joinedResults.push(structured as R)\n    }\n\n    return joinedResults\n  }\n\n  // Apply ordering\n  if (config.orderBy) {\n    if (typeof config.orderBy === 'function') {\n      result.sort(config.orderBy as (a: T, b: T) => number)\n    } else {\n      const orderKey = config.orderBy as keyof T\n      const direction = config.order === 'desc' ? -1 : 1\n      result.sort((a, b) => {\n        const aVal = a[orderKey]\n        const bVal = b[orderKey]\n        if (aVal < bVal) return -1 * direction\n        if (aVal > bVal) return 1 * direction\n        return 0\n      })\n    }\n  }\n\n  // Apply offset\n  if (config.offset) {\n    result = result.slice(config.offset)\n  }\n\n  // Apply limit (check for undefined, not falsy, since 0 is valid)\n  if (config.limit !== undefined) {\n    result = result.slice(0, config.limit)\n  }\n\n  return result as unknown as R[]\n}\n\n/**\n * Hook for creating live queries over collection data.\n *\n * Filters, joins, and transforms collection data reactively.\n * Updates automatically when the source data changes.\n *\n * @param data - Source data array\n * @param config - Query configuration (memoize for best performance)\n * @returns Filtered and transformed data\n *\n * @remarks\n * This hook uses the config object reference for dependency tracking.\n * For optimal performance, wrap your config in useMemo to prevent\n * unnecessary re-computations on every render.\n */\nexport function useLiveQuery<T extends BaseItem, R = T>(\n  data: T[],\n  config: LiveQueryConfig<T, unknown>\n): R[] {\n  // Use the config object reference directly for better memoization\n  // Consumers should memoize their config objects\n  return React.useMemo(\n    () => executeQuery<T, R>(data, config),\n    [data, config]\n  )\n}\n","/**\n * useRecord - Single record hook with real-time updates\n *\n * Optimized hook for working with a single record from a collection.\n * Uses direct RPC call to fetch only the specific record (O(1) instead of O(n)),\n * and subscribes to updates only for that record.\n *\n * @example\n * ```tsx\n * import { useRecord } from '@dotdo/react'\n *\n * function TaskDetail({ taskId }: { taskId: string }) {\n *   const { data: task, isLoading, update, delete: remove } = useRecord<Task>({\n *     collection: 'Task',\n *     id: taskId,\n *   })\n *\n *   if (isLoading) return <Loading />\n *   if (!task) return <NotFound />\n *\n *   return (\n *     <div>\n *       <h1>{task.title}</h1>\n *       <button onClick={() => update({ status: 'done' })}>Mark Done</button>\n *       <button onClick={() => remove()}>Delete</button>\n *     </div>\n *   )\n * }\n * ```\n *\n * @module @dotdo/react\n */\n\nimport * as React from 'react'\nimport { useDotdoContext } from '../context'\nimport type { BaseItem, CollectionConfig, SyncMessage, UseRecordResult } from '../types'\n\n/**\n * Configuration for useRecord hook.\n *\n * @typeParam T - The item type for the record\n */\nexport interface UseRecordConfig<T> extends CollectionConfig<T> {\n  /** The record ID to fetch and watch */\n  id: string\n}\n\n/**\n * Hook for working with a single record from a collection.\n *\n * Provides real-time updates and convenient mutation methods bound\n * to the specific record ID.\n *\n * This implementation uses direct RPC calls to fetch only the specific record,\n * providing O(1) performance instead of O(n) when using useCollection.\n * It also subscribes only to updates for the specific record ID.\n *\n * @param config - Record configuration including collection name and ID\n * @returns Record state and mutation methods\n */\nexport function useRecord<T extends BaseItem>(\n  config: UseRecordConfig<T>\n): UseRecordResult<T> {\n  const { id, collection, branch } = config\n  const { ns, connections } = useDotdoContext()\n\n  // State\n  const [data, setData] = React.useState<T | null>(null)\n  const [isLoading, setIsLoading] = React.useState(true)\n  const [error, setError] = React.useState<Error | null>(null)\n\n  // Refs for stable callbacks\n  const dataRef = React.useRef<T | null>(data)\n  dataRef.current = data\n\n  // Optimistic update store\n  const optimisticRef = React.useRef<{ type: 'update' | 'delete'; original: T } | null>(null)\n\n  // WebSocket ref\n  const wsRef = React.useRef<WebSocket | null>(null)\n\n  // Connection key - unique for collection+branch (not per-record, to allow reusing connection)\n  const connectionKey = branch ? `${collection}:${branch}` : collection\n\n  // Current id ref - to track id in message handlers\n  const idRef = React.useRef(id)\n  idRef.current = id\n\n  // Derive URLs - memoized to prevent re-computation\n  const wsUrl = React.useMemo(() => {\n    return ns.replace(/^https?:/, (m) => m === 'https:' ? 'wss:' : 'ws:') + '/sync'\n  }, [ns])\n\n  const rpcUrl = React.useMemo(() => {\n    return ns + '/rpc'\n  }, [ns])\n\n  // RPC helper - stable reference\n  const rpc = React.useCallback(async (method: string, args: unknown): Promise<unknown> => {\n    const response = await fetch(rpcUrl, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        id: crypto.randomUUID(),\n        type: 'call',\n        calls: [{\n          promiseId: 'p-1',\n          target: { type: 'root' },\n          method: `${collection}.${method}`,\n          args: [{ type: 'value', value: args }],\n        }],\n      }),\n    })\n\n    if (!response.ok) {\n      throw new Error(`HTTP error: ${response.status}`)\n    }\n\n    const result = await response.json()\n    if (result.error) {\n      throw new Error(result.error.message)\n    }\n\n    return result.results?.[0]?.value\n  }, [rpcUrl, collection])\n\n  // Send subscription message for current id\n  const subscribe = React.useCallback((ws: WebSocket) => {\n    const subscribeMsg: Record<string, string> = {\n      type: 'subscribe',\n      collection,\n      key: idRef.current, // Subscribe only to this record\n    }\n    if (branch) {\n      subscribeMsg.branch = branch\n    }\n    ws.send(JSON.stringify(subscribeMsg))\n  }, [collection, branch])\n\n  // Connect to WebSocket and subscribe to this specific record\n  const connect = React.useCallback(() => {\n    if (wsRef.current?.readyState === WebSocket.OPEN) {\n      // Already connected, just re-subscribe with new id\n      subscribe(wsRef.current)\n      return\n    }\n\n    const ws = new WebSocket(wsUrl)\n    wsRef.current = ws\n    connections.set(connectionKey, ws)\n\n    ws.addEventListener('open', () => {\n      subscribe(ws)\n    })\n\n    ws.addEventListener('message', (event: MessageEvent) => {\n      try {\n        const msg = JSON.parse(event.data) as SyncMessage<T>\n        const currentId = idRef.current\n\n        // Handle messages for our specific record\n        if (msg.type === 'initial') {\n          // Initial data: could be single record or array with one item\n          const initialData = msg.data\n          if (Array.isArray(initialData)) {\n            // Find our record in the array\n            const record = initialData.find(item => item.$id === currentId) ?? null\n            setData(record)\n          } else if (initialData && (initialData as T).$id === currentId) {\n            setData(initialData as T)\n          } else {\n            setData(null)\n          }\n          setIsLoading(false)\n          setError(null)\n        } else if (msg.type === 'update') {\n          // Update: only apply if it's our record\n          const updatedItem = msg.data as T\n          const keyToUpdate = msg.key ?? updatedItem?.$id\n          if (keyToUpdate === currentId) {\n            setData(updatedItem)\n          }\n        } else if (msg.type === 'delete') {\n          // Delete: only apply if it's our record\n          if (msg.key === currentId) {\n            setData(null)\n          }\n        } else if (msg.type === 'insert') {\n          // Insert: only apply if it's our record (e.g., after rollback restoration)\n          const insertedItem = msg.data as T\n          if (insertedItem?.$id === currentId) {\n            setData(insertedItem)\n          }\n        }\n      } catch {\n        // Silently ignore malformed messages\n      }\n    })\n\n    ws.addEventListener('close', () => {\n      connections.delete(connectionKey)\n      // Schedule reconnection\n      setTimeout(() => {\n        if (!wsRef.current || wsRef.current.readyState === WebSocket.CLOSED) {\n          connect()\n        }\n      }, 1000)\n    })\n\n    ws.addEventListener('error', () => {\n      setError(new Error('WebSocket connection error'))\n    })\n  }, [wsUrl, collection, branch, connectionKey, connections, subscribe])\n\n  // Initialize connection\n  React.useEffect(() => {\n    connect()\n\n    return () => {\n      if (wsRef.current) {\n        wsRef.current.close()\n        wsRef.current = null\n      }\n      connections.delete(connectionKey)\n    }\n  }, [connect, connectionKey, connections])\n\n  // Handle id changes - re-subscribe without reconnecting\n  React.useEffect(() => {\n    if (wsRef.current?.readyState === WebSocket.OPEN) {\n      // Reset state for new record\n      setData(null)\n      setIsLoading(true)\n      // Send new subscription\n      subscribe(wsRef.current)\n    }\n  }, [id, subscribe])\n\n  // Update mutation with optimistic update\n  const update = React.useCallback(async (changes: Partial<T>): Promise<void> => {\n    const original = dataRef.current\n    if (!original) return\n\n    // Optimistic update\n    setData(prev => prev ? { ...prev, ...changes } : null)\n    optimisticRef.current = { type: 'update', original }\n\n    try {\n      await rpc('update', { key: id, ...changes })\n      optimisticRef.current = null\n    } catch (err) {\n      // Rollback on failure\n      setData(original)\n      optimisticRef.current = null\n      throw err\n    }\n  }, [rpc, id])\n\n  // Delete mutation with optimistic update\n  const deleteRecord = React.useCallback(async (): Promise<void> => {\n    const original = dataRef.current\n    if (!original) return\n\n    // Optimistic update\n    setData(null)\n    optimisticRef.current = { type: 'delete', original }\n\n    try {\n      await rpc('delete', { key: id })\n      optimisticRef.current = null\n    } catch (err) {\n      // Rollback on failure\n      setData(original)\n      optimisticRef.current = null\n      throw err\n    }\n  }, [rpc, id])\n\n  // Refetch - reconnect to get fresh data\n  const refetch = React.useCallback(() => {\n    setIsLoading(true)\n    if (wsRef.current) {\n      wsRef.current.close()\n    }\n    connect()\n  }, [connect])\n\n  // Memoize return value\n  return React.useMemo(() => ({\n    data,\n    isLoading,\n    error,\n    update,\n    delete: deleteRecord,\n    refetch,\n  }), [data, isLoading, error, update, deleteRecord, refetch])\n}\n","/**\n * useConnectionState - Monitor client connection state\n *\n * Provides reactive access to the WebSocket connection state.\n * Useful for showing connection indicators or handling offline states.\n *\n * @example\n * ```tsx\n * import { useConnectionState } from '@dotdo/react'\n *\n * function ConnectionIndicator() {\n *   const state = useConnectionState()\n *\n *   return (\n *     <div className={`indicator ${state}`}>\n *       {state === 'connected' && 'Connected'}\n *       {state === 'connecting' && 'Connecting...'}\n *       {state === 'reconnecting' && 'Reconnecting...'}\n *       {state === 'disconnected' && 'Disconnected'}\n *     </div>\n *   )\n * }\n * ```\n *\n * @module @dotdo/react\n */\n\nimport * as React from 'react'\nimport type { ConnectionState } from '../types'\nimport { useDotdoContext } from '../context'\n\n/**\n * Hook to monitor the client connection state.\n *\n * Returns the current connection state and updates reactively\n * when the connection state changes.\n *\n * @returns Current connection state\n *\n * @remarks\n * States:\n * - 'connecting': Initial connection in progress\n * - 'connected': WebSocket is open and ready\n * - 'reconnecting': Connection lost, attempting to reconnect\n * - 'disconnected': Explicitly disconnected or failed\n */\nexport function useConnectionState(): ConnectionState {\n  const { client } = useDotdoContext()\n  const [state, setState] = React.useState<ConnectionState>(\n    client?.connectionState ?? 'disconnected'\n  )\n\n  React.useEffect(() => {\n    if (!client) {\n      setState('disconnected')\n      return\n    }\n\n    // Set initial state - check if connectionState property exists\n    if (client.connectionState !== undefined) {\n      setState(client.connectionState)\n    } else {\n      // Default to 'connected' if the client exists but doesn't expose connection state\n      setState('connected')\n    }\n\n    // Listen for changes if the client supports it\n    const handleStateChange = (newState: ConnectionState) => {\n      setState(newState)\n    }\n\n    if (client.on) {\n      client.on('connectionStateChange', handleStateChange)\n    }\n\n    return () => {\n      if (client.off) {\n        client.off('connectionStateChange', handleStateChange)\n      }\n    }\n  }, [client])\n\n  return state\n}\n"]}