resolveModules function

List<Module> resolveModules(
  1. Iterable<String> selectedKeys
)

Expands selectedKeys with their transitive dependencies, always prepends core, and returns modules in install order (dependencies before dependents, no duplicates). Unknown keys are ignored here (validate separately).

Implementation

List<Module> resolveModules(Iterable<String> selectedKeys) {
  final resolved = <String, Module>{};

  void add(Module module) {
    if (resolved.containsKey(module.key)) return;
    for (final depKey in module.dependsOn) {
      final dep = kModules[depKey];
      if (dep != null) add(dep);
    }
    resolved[module.key] = module;
  }

  for (final key in selectedKeys) {
    final module = kModules[key];
    if (module != null) add(module);
  }

  return [coreModule, ...resolved.values];
}