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
JavaScript
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
};