depTerminalPath function

String? depTerminalPath(
  1. Circuit circuit,
  2. String nodePath,
  3. String depId,
  4. Circuit? circuitById(
    1. String circuitId
    ),
)

Resolves the cursor path a dependsOn on depId is satisfied by — the dep's own path for a CapabilityStep, or its terminal-step descendant for a SubCircuitStep. Returns null (unsatisfiable, fail-closed) for a dangling dep id or an unresolvable sub-circuit.

Implementation

String? depTerminalPath(
  Circuit circuit,
  String nodePath,
  String depId,
  Circuit? Function(String circuitId) circuitById,
) {
  final dep = circuit.stepById(depId);
  return switch (dep) {
    null => null,
    CapabilityStep() => stepPath(nodePath, depId),
    SubCircuitStep(:final circuitId) => () {
      final sub = circuitById(circuitId);
      if (sub == null) return null;
      return stepPath(stepPath(nodePath, depId), sub.terminalStepId);
    }(),
  };
}