load method

ConfigLoadResult load({
  1. required Directory projectRoot,
})

Loads config using precedence: structure.yaml > pubspec.yaml.flutter_sherpa.arch_sherpa > defaults.

Implementation

ConfigLoadResult load({required Directory projectRoot}) {
  final defaultsMap = ArchSherpaConfig.toMap(ArchSherpaConfig.defaults());

  final structureFile = File('${projectRoot.path}/structure.yaml');
  if (structureFile.existsSync()) {
    final structureMap = _parseYamlFile(structureFile);
    final warnings = _detectDeprecations(structureMap);
    final normalized = _normalizeAliases(structureMap);
    final merged = _deepMerge(defaultsMap, normalized);
    return ConfigLoadResult(
      config: ArchSherpaConfig.fromDynamicMap(merged),
      source: ConfigSource.structureYaml,
      warnings: warnings,
    );
  }

  final pubspecFile = File('${projectRoot.path}/pubspec.yaml');
  if (pubspecFile.existsSync()) {
    final pubspecMap = _parseYamlFile(pubspecFile);
    final flutterSherpa = _asMap(pubspecMap['flutter_sherpa']);
    final archSherpa = _asMap(flutterSherpa['arch_sherpa']);
    if (archSherpa.isNotEmpty) {
      final warnings = _detectDeprecations(archSherpa);
      final normalized = _normalizeAliases(archSherpa);
      final merged = _deepMerge(defaultsMap, normalized);
      return ConfigLoadResult(
        config: ArchSherpaConfig.fromDynamicMap(merged),
        source: ConfigSource.pubspecYaml,
        warnings: warnings,
      );
    }
  }

  return ConfigLoadResult(
    config: ArchSherpaConfig.defaults(),
    source: ConfigSource.defaults,
    warnings: const [],
  );
}