function extractDetails()

in lib/instrumentation/modules/graphql.js [207:255]


  function extractDetails(document, operationName) {
    var queries = [];
    var operation;

    if (document && Array.isArray(document.definitions)) {
      document.definitions.some(function (definition) {
        if (
          !definition ||
          definition.kind !== graphql.Kind.OPERATION_DEFINITION
        )
          return false;
        if (!operationName && operation) return false;
        if (
          !operationName ||
          (definition.name && definition.name.value === operationName)
        ) {
          operation = definition;
          return true;
        }
        return false;
      });

      var selections =
        operation &&
        operation.selectionSet &&
        operation.selectionSet.selections;
      if (selections && Array.isArray(selections)) {
        for (const selection of selections) {
          const kind = selection.name && selection.name.kind;
          if (kind === graphql.Kind.NAME) {
            const queryName = selection.name.value;
            if (queryName) queries.push(queryName);
          }
        }

        queries = queries.sort(function (a, b) {
          if (a > b) return 1;
          else if (a < b) return -1;
          return 0;
        });
      }
    } else {
      agent.logger.debug(
        'unexpected document format - skipping graphql query extraction',
      );
    }

    return { queries, operation };
  }