import { type NodeMatchCandidate, resolveNodeIdFromCandidates } from "./node-match.js"; type ResolveNodeFromListOptions = { allowDefault?: boolean; pickDefaultNode?: (nodes: TNode[]) => TNode | null; }; export function resolveNodeIdFromNodeList( nodes: TNode[], query?: string, options: ResolveNodeFromListOptions = {}, ): string { const q = String(query ?? "").trim(); if (!q) { if (options.allowDefault === true && options.pickDefaultNode) { const picked = options.pickDefaultNode(nodes); if (picked) { return picked.nodeId; } } throw new Error("node required"); } return resolveNodeIdFromCandidates(nodes, q); } export function resolveNodeFromNodeList( nodes: TNode[], query?: string, options: ResolveNodeFromListOptions = {}, ): TNode { const nodeId = resolveNodeIdFromNodeList(nodes, query, options); return nodes.find((node) => node.nodeId === nodeId) ?? ({ nodeId } as TNode); }