private static findAggsIntersections()

in packages/@aws-c2a/engine/lib/aggregations/aggregations-extractor.ts [58:86]


  private static findAggsIntersections<T>(groups: Aggregation<T>[]): Aggregation<T>[]{
    const resultingIntersections: Record<string, Aggregation<T>> = {};
    const indexGetter = (originalAggs: number[]) => originalAggs.join(',');

    for(let agg = 0; agg< groups.length; agg++){ // for each original Agg
      for(const operation of [...groups[agg].entities]){ // each operation in Agg
        const aggsContainingOperation: number[] = [agg];
        for(let agg2 = agg+1; agg2 < groups.length; agg2++){ // check all other original Aggs for same operation
          if(groups[agg2].entities.has(operation)){
            aggsContainingOperation.push(agg2); // add it to the intersection identifier
            groups[agg2].entities.delete(operation);
          }
        }
        if(aggsContainingOperation.length > 1){
          const intersectionIndex = indexGetter(aggsContainingOperation);
          if(!resultingIntersections[intersectionIndex]){
            resultingIntersections[intersectionIndex] = {
              entities: new Set([operation]),
              characteristics: Object.assign({}, ...aggsContainingOperation.map(i => groups[i].characteristics)),
            };
          } else {
            resultingIntersections[intersectionIndex].entities.add(operation);
          }
          groups[agg].entities.delete(operation);
        }
      }
    }
    return [...groups, ...Object.values(resultingIntersections)].filter(agg => agg.entities.size > 0);
  }