import type { GraphLookup } from '../graph/lookup'; import { statesOf } 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(asset) }; }, machine: (assetId) => { const asset = findAssetOf(project, assetId, 'statemachine'); return asset ? { name: asset.name, states: statesOf(asset.graph) } : null; }, }; }