addFragment method

void addFragment(
  1. Node? node, [
  2. List<String> from = const []
])

Implementation

void addFragment(Node? node, [List<String> from = const []]) {
  if (node is FragmentDefinitionNode) {
    var fragmentName = node.name.value;
    fragmentDepends.addType(fragmentName);
    from.forEach((f) {
      fragmentDepends.add(f, fragmentName);
      fragmentDepends.addAll(f, fragmentDepends.get(fragmentName));
    });
    if (fragments.containsKey(fragmentName)) {
      return;
    }
    fragments[fragmentName] = node;

    void inspectNode(SelectionSetNode? set) {
      set?.selections.forEach((sel) {
        if (sel is FragmentSpreadNode) {
          addFragment(
              doc.findFragment(sel.name.value), [...from, fragmentName]);
        } else if (sel is FieldNode) {
          inspectNode(sel.selectionSet);
        }
      });
    }

    inspectNode(node.selectionSet);
  }
}