blob: a4945fbe369cfbcd8532efddca1ea92ecad9d10a [file] [log] [blame]
// 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 'package:logging/logging.dart';
import 'package:meta/meta.dart';
import '../asset/id.dart';
import '../asset/reader.dart';
import '../asset/writer.dart';
import '../builder/logging.dart';
import '../builder/post_process_build_step.dart';
import '../builder/post_process_builder.dart';
/// Run [builder] with [inputId] as the primary input.
///
/// [addAsset] should update the build systems knowledge of what assets exist.
/// If an asset should not be written this function should throw.
/// [deleteAsset] should remove the asset from the build system, it will not be
/// deleted on disk since the `writer` has no mechanism for delete.
Future<void> runPostProcessBuilder(PostProcessBuilder builder, AssetId inputId,
AssetReader reader, AssetWriter writer, Logger logger,
{@required void Function(AssetId) addAsset,
@required void Function(AssetId) deleteAsset}) async {
await scopeLogAsync(() async {
var buildStep =
postProcessBuildStep(inputId, reader, writer, addAsset, deleteAsset);
try {
await builder.build(buildStep);
} finally {
await buildStep.complete();
}
}, logger);
}