resolveAll method

Future<Program> resolveAll(
  1. Program program
)

Resolve all ModuleImport entries in a Program, returning a new Program with all imports inlined as concrete modules.

Implementation

Future<Program> resolveAll(Program program) async {
  final resolvedModules = <String, Module>{};
  for (final m in program.modules) {
    resolvedModules[m.name] = m;
  }

  for (final m in program.modules) {
    for (final import_ in m.moduleImports) {
      if (resolvedModules.containsKey(import_.name)) continue;
      try {
        final resolved = await resolve(import_);
        resolvedModules[import_.name] = resolved;
      } catch (e) {
        // If resolution fails, leave the import unresolved.
        // Engines/compilers will report the missing module.
      }
    }
  }

  return Program()
    ..name = program.name
    ..version = program.version
    ..entryModule = program.entryModule
    ..entryFunction = program.entryFunction
    ..metadata = program.metadata
    ..modules.addAll(resolvedModules.values);
}