UNPKG

trellis

Version:

Agentic State Engine — event-sourced causal graph with branching, decision traces, and realtime sync for AI-native applications

88 lines (86 loc) 2.13 kB
import { useTrellis } from "../chunk-RKOK7WEV.js"; import { useSignal } from "../chunk-O2AV5WMN.js"; import { entityMutations } from "../chunk-USEINYUL.js"; import { liveEntities, liveEntity } from "../chunk-J3WYZO3Q.js"; import "../chunk-JUEMDWLU.js"; import "../chunk-K224QLJL.js"; import { Signal } from "../chunk-UBGUDMUV.js"; import "../chunk-2ESYSVXG.js"; // src/react/schema-hooks.ts import { useEffect, useMemo } from "react"; var IDLE = new Signal({ data: [], loading: false, error: null }); var IDLE_SINGLE = new Signal({ data: null, loading: false, error: null }); function parseReadOptions(opts) { if (!opts) return {}; if ("resolve" in opts || "where" in opts) return opts; return { where: opts }; } function useLiveEntities(schema, opts) { const client = useTrellis(); const parsed = parseReadOptions(opts); const optsKey = JSON.stringify(parsed); const res = useMemo( () => schema ? liveEntities(client, schema, parsed) : null, // eslint-disable-next-line react-hooks/exhaustive-deps [client, schema, optsKey] ); useEffect(() => res?.start(), [res]); return useSignal(res?.signal ?? IDLE); } function useLiveEntity(schema, id, opts) { const client = useTrellis(); const optsKey = JSON.stringify(opts ?? {}); const res = useMemo( () => schema && id ? liveEntity(client, schema, id, opts) : null, // eslint-disable-next-line react-hooks/exhaustive-deps [client, schema, id, optsKey] ); useEffect(() => res?.start(), [res]); return useSignal( res?.signal ?? IDLE_SINGLE ); } function useEntities(schema, opts) { const state = useLiveEntities(schema, opts); return { data: state.data, loading: state.loading, error: state.error }; } function useEntity(schema, id, opts) { const state = useLiveEntity(id ? schema : null, id, opts); return { data: state.data, loading: state.loading, error: state.error }; } function useMutation(schema) { const client = useTrellis(); return useMemo(() => entityMutations(client, schema), [client, schema]); } export { useEntities, useEntity, useMutation };