export default async function fetchBlankNodeNeighbors()

in packages/graph-explorer/src/connector/sparql/fetchBlankNodeNeighbors/index.ts [98:144]


export default async function fetchBlankNodeNeighbors(
  sparqlFetch: SparqlFetch,
  req: SPARQLBlankNodeNeighborsRequest
): Promise<SPARQLBlankNodeNeighborsResponse> {
  logger.log("[SPARQL Explorer] Fetching blank node one hop neighbors", req);
  const neighborsTemplate = blankNodeOneHopNeighborsTemplate(req.subQuery);
  const neighbors = await sparqlFetch<
    RawBlankNodeNeighborsResponse | ErrorResponse
  >(neighborsTemplate);

  if (isErrorResponse(neighbors)) {
    throw new Error(neighbors.detailedMessage);
  }

  const filteredNeighbors = neighbors.results.bindings.filter(
    result => result.bNode.value === req.resourceURI
  );

  const vertices = mapOneHop({
    results: {
      bindings: filteredNeighbors,
    },
  });
  const subjectsURIs = vertices.map(v => v.id);
  const edges = await fetchBlankNodeNeighborsPredicates(
    sparqlFetch,
    req.subQuery,
    req.resourceURI,
    req.resourceClasses,
    subjectsURIs
  );

  return {
    totalCount: vertices.length,
    counts: Object.entries(groupBy(vertices, v => v.type)).reduce(
      (counts, [group, vs]) => {
        counts[group] = vs.length;
        return counts;
      },
      {} as Record<string, number>
    ),
    neighbors: {
      vertices,
      edges,
    },
  };
}