|
5 | 5 | import 'dart:async'; |
6 | 6 | import 'dart:convert'; |
7 | 7 |
|
8 | | -import 'package:async/async.dart'; |
9 | | -import 'package:crypto/crypto.dart' show Digest; |
| 8 | +import 'package:crypto/crypto.dart'; |
10 | 9 |
|
11 | 10 | import '../../build.dart'; |
12 | 11 |
|
13 | | -// This is not exported to hack around a package-private constructor. |
14 | | -PostProcessBuildStep postProcessBuildStep( |
15 | | - AssetId inputId, |
16 | | - AssetReader reader, |
17 | | - AssetWriter writer, |
18 | | - void Function(AssetId) addAsset, |
19 | | - void Function(AssetId) deleteAsset, |
20 | | -) => PostProcessBuildStep._(inputId, reader, writer, addAsset, deleteAsset); |
21 | | - |
22 | 12 | /// A simplified [BuildStep] which can only read its primary input, and can't |
23 | | -/// get a [Resolver] or any [Resource]s, at least for now. |
24 | | -class PostProcessBuildStep { |
25 | | - final AssetId inputId; |
26 | | - |
27 | | - final AssetReader _reader; |
28 | | - final AssetWriter _writer; |
29 | | - final void Function(AssetId) _addAsset; |
30 | | - final void Function(AssetId) _deleteAsset; |
31 | | - |
32 | | - /// The result of any writes which are starting during this step. |
33 | | - final _writeResults = <Future<Result<void>>>[]; |
| 13 | +/// get a [Resolver] or any [Resource]s. |
| 14 | +abstract class PostProcessBuildStep { |
| 15 | + AssetId get inputId; |
34 | 16 |
|
35 | | - PostProcessBuildStep._( |
36 | | - this.inputId, |
37 | | - this._reader, |
38 | | - this._writer, |
39 | | - this._addAsset, |
40 | | - this._deleteAsset, |
41 | | - ); |
| 17 | + Future<Digest> digest(AssetId id); |
42 | 18 |
|
43 | | - Future<Digest> digest(AssetId id) => |
44 | | - inputId == id |
45 | | - ? _reader.digest(id) |
46 | | - : Future.error(InvalidInputException(id)); |
| 19 | + Future<List<int>> readInputAsBytes(); |
47 | 20 |
|
48 | | - Future<List<int>> readInputAsBytes() => _reader.readAsBytes(inputId); |
| 21 | + Future<String> readInputAsString({Encoding encoding = utf8}); |
49 | 22 |
|
50 | | - Future<String> readInputAsString({Encoding encoding = utf8}) => |
51 | | - _reader.readAsString(inputId, encoding: encoding); |
52 | | - |
53 | | - Future<void> writeAsBytes(AssetId id, FutureOr<List<int>> bytes) { |
54 | | - _addAsset(id); |
55 | | - var done = _futureOrWrite( |
56 | | - bytes, |
57 | | - (List<int> b) => _writer.writeAsBytes(id, b), |
58 | | - ); |
59 | | - _writeResults.add(Result.capture(done)); |
60 | | - return done; |
61 | | - } |
| 23 | + Future<void> writeAsBytes(AssetId id, FutureOr<List<int>> bytes); |
62 | 24 |
|
63 | 25 | Future<void> writeAsString( |
64 | 26 | AssetId id, |
65 | 27 | FutureOr<String> content, { |
66 | 28 | Encoding encoding = utf8, |
67 | | - }) { |
68 | | - _addAsset(id); |
69 | | - var done = _futureOrWrite( |
70 | | - content, |
71 | | - (String c) => _writer.writeAsString(id, c, encoding: encoding), |
72 | | - ); |
73 | | - _writeResults.add(Result.capture(done)); |
74 | | - return done; |
75 | | - } |
| 29 | + }); |
76 | 30 |
|
77 | 31 | /// Marks an asset for deletion in the post process step. |
78 | | - void deletePrimaryInput() { |
79 | | - _deleteAsset(inputId); |
80 | | - } |
| 32 | + void deletePrimaryInput(); |
81 | 33 |
|
82 | 34 | /// Waits for work to finish and cleans up resources. |
83 | 35 | /// |
84 | 36 | /// This method should be called after a build has completed. After the |
85 | 37 | /// returned [Future] completes then all outputs have been written. |
86 | | - Future<void> complete() async { |
87 | | - await Future.wait(_writeResults.map(Result.release)); |
88 | | - } |
| 38 | + Future<void> complete(); |
89 | 39 | } |
90 | | - |
91 | | -Future<void> _futureOrWrite<T>( |
92 | | - FutureOr<T> content, |
93 | | - Future<void> Function(T content) write, |
94 | | -) => (content is Future<T>) ? content.then(write) : write(content); |
0 commit comments