encodeAsync method
Async variant of encode that supports dependency resolution.
When resolveExternalDeps is true and a PubClient was provided,
external package: imports are downloaded, recursively encoded, and
merged into the program instead of being left as empty stubs.
Implementation
Future<Program> encodeAsync({
String? entryFile,
String entryFunction = 'main',
}) async {
final program = encode(entryFile: entryFile, entryFunction: entryFunction);
if (!resolveExternalDeps || _pubClient == null) return program;
// Collect stub module names (modules with zero functions = stubs).
final stubNames = <String>{};
for (final m in program.modules) {
if (m.functions.isEmpty && m.name != '__assets__') {
stubNames.add(m.name);
}
}
if (stubNames.isEmpty) return program;
final resolved = await _resolveExternalDeps(stubNames);
if (resolved.isEmpty) return program;
// Replace stubs with resolved modules.
final modules = <Module>[];
for (final m in program.modules) {
if (stubNames.contains(m.name)) continue;
modules.add(m);
}
modules.addAll(resolved);
return Program()
..name = program.name
..version = program.version
..entryModule = program.entryModule
..entryFunction = program.entryFunction
..modules.addAll(modules);
}