import type { GraphLookup } from '../graph/lookup'; import { statesOf, transitionsOf } from '../graph/stateMachine'; import { resolveAssetProps } from '../properties/resolve'; import { findAssetOf, type Project } from './Project'; /** * What a graph may see of the project around it. A behavior's `defaults` are its variable values; * every call copies them, so a nested behavior never carries state from one call to the next. */ export function graphLookup(project: Project): GraphLookup { return { behavior: (assetId) => { const asset = findAssetOf(project, assetId, 'behavior'); if (!asset) return null; return { name: asset.name, graph: asset.graph, defaults: resolveAssetProps(project, asset) }; }, machine: (assetId) => { const asset = findAssetOf(project, assetId, 'statemachine'); if (!asset) return null; return { name: asset.name, states: statesOf(asset.graph), transitions: transitionsOf(asset.graph), }; }, }; }