load function

Future<Map<String, RuleConfig>> load({
  1. required String file,
  2. String? dir,
})

Implementation

Future<Map<String, RuleConfig>> load({
  required String file,
  String? dir,
}) async {
  Map<String, RuleConfig> rules = {};
  Uri? uri;
  if (!file.startsWith('package:')) {
    uri = toUri(join(dir ?? Directory.current.path, file));
    dir = dirname(uri.path);
  } else {
    uri = await Isolate.resolvePackageUri(Uri.parse(file));
    dir = uri?.path.split('/lib/').first;
  }
  if (uri != null) {
    final file = File.fromUri(uri);
    if (await file.exists()) {
      final yaml = loadYaml(await file.readAsString());
      final include = yaml?['include'] as String?;
      final rulesMap = yaml?['rules'] as Map?;
      if (rulesMap != null) {
        for (var entry in rulesMap.entries) {
          rules[entry.key] = _extractRuleConfig(entry.value);
        }
      }
      if (include != null) {
        final upstream = await load(dir: dir, file: include);
        if (upstream.isNotEmpty) {
          rules = {
            ...upstream,
            ...rules,
          };
        }
      }
    }
  }
  return rules;
}