Future _handleQuery()

in build_runner/lib/src/server/asset_graph_handler.dart [71:141]


  Future<shelf.Response> _handleQuery(String query, String rootDir,
      {String? filter}) async {
    var filterGlob = filter != null ? Glob(filter) : null;
    var pipeIndex = query.indexOf('|');

    AssetId assetId;
    if (pipeIndex < 0) {
      var querySplit = query.split('/');

      assetId = pathToAssetId(
          _rootPackage, querySplit.first, querySplit.skip(1).toList());

      if (!_assetGraph.contains(assetId)) {
        var secondTry = pathToAssetId(_rootPackage, rootDir, querySplit);

        if (!_assetGraph.contains(secondTry)) {
          return shelf.Response.notFound(
              'Could not find asset for path "$query". Tried:\n'
              '- $assetId\n'
              '- $secondTry');
        }
        assetId = secondTry;
      }
    } else {
      assetId = AssetId.parse(query);
      if (!_assetGraph.contains(assetId)) {
        return shelf.Response.notFound(
            'Could not find asset in build graph: $assetId');
      }
    }
    var node = _assetGraph.get(assetId)!;
    var currentEdge = 0;
    var nodes = [
      {'id': '${node.id}', 'label': '${node.id}'}
    ];
    var edges = <Map<String, String>>[];
    for (final output in node.outputs) {
      if (filterGlob != null && !filterGlob.matches(output.toString())) {
        continue;
      }
      edges.add(
          {'from': '${node.id}', 'to': '$output', 'id': 'e${currentEdge++}'});
      nodes.add({'id': '$output', 'label': '$output'});
    }
    if (node is NodeWithInputs) {
      for (final input in node.inputs) {
        if (filterGlob != null && !filterGlob.matches(input.toString())) {
          continue;
        }
        edges.add(
            {'from': '$input', 'to': '${node.id}', 'id': 'e${currentEdge++}'});
        nodes.add({'id': '$input', 'label': '$input'});
      }
    }
    var result = <String, dynamic>{
      'primary': {
        'id': '${node.id}',
        'hidden': node is GeneratedAssetNode ? node.isHidden : null,
        'state': node is NodeWithInputs ? '${node.state}' : null,
        'wasOutput': node is GeneratedAssetNode ? node.wasOutput : null,
        'isFailure': node is GeneratedAssetNode ? node.isFailure : null,
        'phaseNumber': node is NodeWithInputs ? node.phaseNumber : null,
        'type': node.runtimeType.toString(),
        'glob': node is GlobAssetNode ? node.glob.pattern : null,
        'lastKnownDigest': node.lastKnownDigest.toString(),
      },
      'edges': edges,
      'nodes': nodes,
    };
    return _jsonResponse(_jsonUtf8Encoder.convert(result));
  }