@@ -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] .
@@ -27,6 +26,7 @@ Future<T> resolveSource<T>(
27
26
FutureOr <T > Function (Resolver resolver) action, {
28
27
AssetId ? inputId,
29
28
PackageConfig ? packageConfig,
29
+ Set <AssetId >? nonInputsToReadFromFilesystem,
30
30
Future <void >? tearDown,
31
31
Resolvers ? resolvers,
32
32
}) {
@@ -38,6 +38,7 @@ Future<T> resolveSource<T>(
38
38
inputId.package,
39
39
action,
40
40
packageConfig: packageConfig,
41
+ nonInputsToReadFromFilesystem: nonInputsToReadFromFilesystem,
41
42
resolverFor: inputId,
42
43
tearDown: tearDown,
43
44
resolvers: resolvers,
@@ -120,6 +121,7 @@ Future<T> resolveSources<T>(
120
121
Map <String , String > inputs,
121
122
FutureOr <T > Function (Resolver resolver) action, {
122
123
PackageConfig ? packageConfig,
124
+ Set <AssetId >? nonInputsToReadFromFilesystem,
123
125
String ? resolverFor,
124
126
String ? rootPackage,
125
127
FutureOr <void > Function (InMemoryAssetReader )? assetReaderChecks,
@@ -134,6 +136,7 @@ Future<T> resolveSources<T>(
134
136
rootPackage ?? AssetId .parse (inputs.keys.first).package,
135
137
action,
136
138
packageConfig: packageConfig,
139
+ nonInputsToReadFromFilesystem: nonInputsToReadFromFilesystem,
137
140
resolverFor: AssetId .parse (resolverFor ?? inputs.keys.first),
138
141
assetReaderChecks: assetReaderChecks,
139
142
tearDown: tearDown,
@@ -146,6 +149,7 @@ Future<T> resolveAsset<T>(
146
149
AssetId inputId,
147
150
FutureOr <T > Function (Resolver resolver) action, {
148
151
PackageConfig ? packageConfig,
152
+ Set <AssetId >? nonInputsToReadFromFilesystem,
149
153
Future <void >? tearDown,
150
154
Resolvers ? resolvers,
151
155
}) {
@@ -156,6 +160,7 @@ Future<T> resolveAsset<T>(
156
160
inputId.package,
157
161
action,
158
162
packageConfig: packageConfig,
163
+ nonInputsToReadFromFilesystem: nonInputsToReadFromFilesystem,
159
164
resolverFor: inputId,
160
165
tearDown: tearDown,
161
166
resolvers: resolvers,
@@ -172,19 +177,25 @@ Future<T> _resolveAssets<T>(
172
177
String rootPackage,
173
178
FutureOr <T > Function (Resolver resolver) action, {
174
179
PackageConfig ? packageConfig,
180
+ Set <AssetId >? nonInputsToReadFromFilesystem,
175
181
AssetId ? resolverFor,
176
182
FutureOr <void > Function (InMemoryAssetReader )? assetReaderChecks,
177
183
Future <void >? tearDown,
178
184
Resolvers ? resolvers,
179
185
}) async {
180
186
final resolvedConfig = packageConfig ??
181
187
await loadPackageConfigUri ((await Isolate .packageConfig)! );
182
- final assetReader = PackageAssetReader (resolvedConfig, rootPackage);
183
188
final resolveBuilder = _ResolveSourceBuilder (
184
189
action,
185
190
resolverFor,
186
191
tearDown,
187
192
);
193
+
194
+ // Prepare the in-memory filesystem the build will run on.
195
+ //
196
+ // First, add directly-passed [inputs], reading from the filesystem if the
197
+ // string passed is [useAssetReader].
198
+ final assetReader = PackageAssetReader (resolvedConfig, rootPackage);
188
199
final inputAssets = < AssetId , String > {};
189
200
await Future .wait (inputs.keys.map ((String rawAssetId) async {
190
201
final assetId = AssetId .parse (rawAssetId);
@@ -194,11 +205,19 @@ Future<T> _resolveAssets<T>(
194
205
}
195
206
inputAssets[assetId] = assetValue;
196
207
}));
197
- final inMemory = InMemoryAssetReaderWriter (
208
+ final readerWriter = InMemoryAssetReaderWriter (
198
209
sourceAssets: inputAssets,
199
210
rootPackage: rootPackage,
200
211
);
201
212
213
+ // Then, copy any additionally requested files from the filesystem to the
214
+ // in-memory filesystem.
215
+ if (nonInputsToReadFromFilesystem != null ) {
216
+ for (final id in nonInputsToReadFromFilesystem) {
217
+ await readerWriter.writeAsBytes (id, await assetReader.readAsBytes (id));
218
+ }
219
+ }
220
+
202
221
// Use the default resolver if no experiments are enabled. This is much
203
222
// faster.
204
223
resolvers ?? = packageConfig == null && enabledExperiments.isEmpty
@@ -216,13 +235,13 @@ Future<T> _resolveAssets<T>(
216
235
unawaited (runBuilder (
217
236
resolveBuilder,
218
237
inputAssets.keys,
219
- MultiAssetReader ([inMemory, assetReader]) ,
220
- inMemory ,
238
+ readerWriter ,
239
+ readerWriter ,
221
240
resolvers,
222
241
).catchError ((_) {}));
223
242
final result = await resolveBuilder.onDone.future;
224
243
if (assetReaderChecks != null ) {
225
- await assetReaderChecks (inMemory );
244
+ await assetReaderChecks (readerWriter );
226
245
}
227
246
return result;
228
247
}
0 commit comments