private evaluateReport()

in packages/aws-c2a/lib/toolkit.ts [139:185]


  private evaluateReport(report: ChangeAnalysisReport, failCondition?: FAIL_ON) {
    if (!failCondition)
      return 0;

    const aggregationMap = groupArrayBy(report.aggregations, (agg) => agg.characteristics.RISK);
    const aggregations = {
      high: aggregationMap.get(RuleRisk.High)?.[0]?.subAggs ?? [],
      low: aggregationMap.get(RuleRisk.Low)?.[0]?.subAggs ?? [],
      unknown: aggregationMap.get(RuleRisk.Unknown)?.[0]?.subAggs ?? [],
    };

    const evaluateAggregations = (errorMessage: string, ...filter: RuleRisk[]) => {
      const filteredAggregations: {[key: string]: number} = Object.entries(aggregations)
        .filter(([risk, values]) => filter.includes(risk as RuleRisk) && (values?.length ?? 0) > 0)
        .reduce((acc, [risk, values]) => ({...acc, [risk]: values?.length ?? 0}), {});

      if (Object.values(filteredAggregations).length > 0) {
        const frequencyReport = Object.entries(filteredAggregations)
          .reduce((acc, [risk, frequency]) => `${acc}\n * ${risk}: ${frequency}`, 'Risk Aggregation Report:');
        error(`${errorMessage}\n\n${frequencyReport}`);
        return 1;
      }
      return 0;
    };

    switch (failCondition) {
      case FAIL_ON.ALL: {
        return evaluateAggregations(
          `Changes detected. Your changes fall under ${failCondition} rules.`,
          RuleRisk.Low, RuleRisk.Unknown, RuleRisk.High,
        );
      }
      case FAIL_ON.UNKNOWN_AND_HIGH: {
        return evaluateAggregations(
          `Unknown/high risk changes detected. Your changes fall under ${failCondition} rules.`,
          RuleRisk.Unknown, RuleRisk.High,
        );
      }
      case FAIL_ON.HIGH: {
        return evaluateAggregations(
          `High risk changes detected. Your changes fall under ${failCondition} rules.`,
          RuleRisk.High,
        );
      }
      default: { return 0; }
    }
  }