referenceChain method

Iterable<LocatedNode> referenceChain(
  1. ReferenceGraph graph
)

Visits static reference targets once per chain.

Implementation

Iterable<LocatedNode> referenceChain(ReferenceGraph graph) sync* {
  final seen = <ReferenceLocation>{};
  var current = this;
  while (seen.add(current.location)) {
    yield current;
    if (!current.node.fields.containsKey(r'$ref')) {
      return;
    }
    final ReferenceTarget? edge = graph.targetFor(
      current.at('${current.node.pointer}/\$ref'),
    );
    if (edge == null) {
      return;
    }
    current = current.target(edge);
  }
}