public static planAggregations()

in firestore-counter/functions/src/planner.ts [47:100]


  public static planAggregations(
    start: string,
    snaps: firestore.DocumentSnapshot[]
  ): AggregationPlan[] {
    if (snaps.length === 0) return [];

    let result: AggregationPlan[] = [];

    let prefixLen = Planner.aggrPrefixLen(
      start,
      snaps[snaps.length - 1].ref.path
    );
    let [aggregate, isPartial] = Planner.constructAggregate(
      snaps[snaps.length - 1].ref.path,
      prefixLen
    );
    let shards: firestore.DocumentSnapshot[] = [];
    let partials: firestore.DocumentSnapshot[] = [];
    for (let i = snaps.length - 1; i >= 0; i--) {
      let [newAggregate, newIsPartial] = Planner.constructAggregate(
        snaps[i].ref.path,
        prefixLen
      );
      if (newAggregate !== aggregate) {
        shards.reverse();
        partials.reverse();
        result.push({
          aggregate: aggregate,
          isPartial: isPartial,
          shards: shards,
          partials: partials,
        });
        aggregate = newAggregate;
        isPartial = newIsPartial;
        shards = [];
        partials = [];
      }
      if (Planner.isPartialShard(snaps[i].ref.path)) {
        partials.push(snaps[i]);
      } else {
        shards.push(snaps[i]);
      }
    }
    shards.reverse();
    partials.reverse();
    result.push({
      aggregate: aggregate,
      isPartial: isPartial,
      shards: shards,
      partials: partials,
    });
    result.reverse();
    return result;
  }