| // Copyright (c) 2018, 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. |
| |
| import 'dart:async'; |
| |
| import 'builder.dart'; |
| import 'post_process_build_step.dart'; |
| |
| /// A builder which runes in a special phase at the end of the build. |
| /// |
| /// They are different from a normal [Builder] in several ways: |
| /// |
| /// - They don't have to declare output extensions, and can output any file as |
| /// long as it doesn't conflict with an existing one. |
| /// - They can only read their primary input. |
| /// - They will not cause optional actions to run - they will only run on assets |
| /// that were built as a part of the normal build. |
| /// - They all run in a single phase, and thus can not see the outputs of any |
| /// other [PostProcessBuilder]s. |
| /// - Because they run in a separate phase, after other builders, none of thier |
| /// outputs can be consumed by [Builder]s. |
| /// |
| /// Because of these restrictions, these builders should never be used to output |
| /// Dart files, or any other file which would should be processed by normal |
| /// [Builder]s. |
| abstract class PostProcessBuilder { |
| /// The extensions this builder expects for its inputs. |
| Iterable<String> get inputExtensions; |
| |
| /// Generates the outputs and deletes for [buildStep]. |
| FutureOr<void> build(PostProcessBuildStep buildStep); |
| } |
| |
| typedef PostProcessBuilderFactory = PostProcessBuilder Function(BuilderOptions); |