// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library barback.transformer_group;

/// A [TransformerGroup] encapsulates a phased collection of transformers.
///
/// A transformer group is defined like a collection of phases, such as you
/// might pass to [Barback.updateTransformers]. Input assets are transformed by
/// the first phase, whose results are passed to the second phase, and so on.
///
/// However, from the perspective of someone using a [TransformerGroup], it
/// works just like a [Transformer]. It can be included in phases, and will run
/// in parallel to other transformers or groups in those phases. Other
/// transformers and groups will be unable to see any intermediate assets that
/// are generated by one phase of the group and consumed by another. Phases
/// after the one containing the group will be able to see its outputs, though.
class TransformerGroup {
  /// The phases that comprise this group.
  ///
  /// Each element of the inner iterable must be either a [Transformer] or a
  /// [TransformerGroup].
  final Iterable<Iterable> phases;

  TransformerGroup(Iterable<Iterable> phases)
      : this.phases = phases.map((phase) => phase.toList()).toList();
}
