@@ -11,7 +11,6 @@ import 'package:build_resolvers/build_resolvers.dart';
11
11
import 'package:package_config/package_config.dart' ;
12
12
13
13
import 'in_memory_reader.dart' ;
14
- import 'multi_asset_reader.dart' ;
15
14
import 'package_reader.dart' ;
16
15
17
16
/// Marker constant that may be used in combination with [resolveSources] .
@@ -120,6 +119,7 @@ Future<T> resolveSources<T>(
120
119
Map <String , String > inputs,
121
120
FutureOr <T > Function (Resolver resolver) action, {
122
121
PackageConfig ? packageConfig,
122
+ Set <AssetId >? nonInputsToReadFromFilesystem,
123
123
String ? resolverFor,
124
124
String ? rootPackage,
125
125
FutureOr <void > Function (InMemoryAssetReader )? assetReaderChecks,
@@ -134,6 +134,7 @@ Future<T> resolveSources<T>(
134
134
rootPackage ?? AssetId .parse (inputs.keys.first).package,
135
135
action,
136
136
packageConfig: packageConfig,
137
+ nonInputsToReadFromFilesystem: nonInputsToReadFromFilesystem,
137
138
resolverFor: AssetId .parse (resolverFor ?? inputs.keys.first),
138
139
assetReaderChecks: assetReaderChecks,
139
140
tearDown: tearDown,
@@ -146,6 +147,7 @@ Future<T> resolveAsset<T>(
146
147
AssetId inputId,
147
148
FutureOr <T > Function (Resolver resolver) action, {
148
149
PackageConfig ? packageConfig,
150
+ Set <AssetId >? nonInputsToReadFromFilesystem,
149
151
Future <void >? tearDown,
150
152
Resolvers ? resolvers,
151
153
}) {
@@ -156,6 +158,7 @@ Future<T> resolveAsset<T>(
156
158
inputId.package,
157
159
action,
158
160
packageConfig: packageConfig,
161
+ nonInputsToReadFromFilesystem: nonInputsToReadFromFilesystem,
159
162
resolverFor: inputId,
160
163
tearDown: tearDown,
161
164
resolvers: resolvers,
@@ -172,19 +175,25 @@ Future<T> _resolveAssets<T>(
172
175
String rootPackage,
173
176
FutureOr <T > Function (Resolver resolver) action, {
174
177
PackageConfig ? packageConfig,
178
+ Set <AssetId >? nonInputsToReadFromFilesystem,
175
179
AssetId ? resolverFor,
176
180
FutureOr <void > Function (InMemoryAssetReader )? assetReaderChecks,
177
181
Future <void >? tearDown,
178
182
Resolvers ? resolvers,
179
183
}) async {
180
184
final resolvedConfig = packageConfig ??
181
185
await loadPackageConfigUri ((await Isolate .packageConfig)! );
182
- final assetReader = PackageAssetReader (resolvedConfig, rootPackage);
183
186
final resolveBuilder = _ResolveSourceBuilder (
184
187
action,
185
188
resolverFor,
186
189
tearDown,
187
190
);
191
+
192
+ // Prepare the in-memory filesystem the build will run on.
193
+ //
194
+ // First, add directly-passed [inputs], reading from the filesysem if the
195
+ // string passed is [useAssetReader].
196
+ final assetReader = PackageAssetReader (resolvedConfig, rootPackage);
188
197
final inputAssets = < AssetId , String > {};
189
198
await Future .wait (inputs.keys.map ((String rawAssetId) async {
190
199
final assetId = AssetId .parse (rawAssetId);
@@ -194,11 +203,18 @@ Future<T> _resolveAssets<T>(
194
203
}
195
204
inputAssets[assetId] = assetValue;
196
205
}));
197
- final inMemory = InMemoryAssetReaderWriter (
206
+ final readerWriter = InMemoryAssetReaderWriter (
198
207
sourceAssets: inputAssets,
199
208
rootPackage: rootPackage,
200
209
);
201
210
211
+ // Then, read any additionally requested files from the filesystem. These are
212
+ if (nonInputsToReadFromFilesystem != null ) {
213
+ for (final id in nonInputsToReadFromFilesystem) {
214
+ await readerWriter.writeAsBytes (id, await assetReader.readAsBytes (id));
215
+ }
216
+ }
217
+
202
218
// Use the default resolver if no experiments are enabled. This is much
203
219
// faster.
204
220
resolvers ?? = packageConfig == null && enabledExperiments.isEmpty
@@ -216,13 +232,13 @@ Future<T> _resolveAssets<T>(
216
232
unawaited (runBuilder (
217
233
resolveBuilder,
218
234
inputAssets.keys,
219
- MultiAssetReader ([inMemory, assetReader]) ,
220
- inMemory ,
235
+ readerWriter ,
236
+ readerWriter ,
221
237
resolvers,
222
238
).catchError ((_) {}));
223
239
final result = await resolveBuilder.onDone.future;
224
240
if (assetReaderChecks != null ) {
225
- await assetReaderChecks (inMemory );
241
+ await assetReaderChecks (readerWriter );
226
242
}
227
243
return result;
228
244
}
0 commit comments