compileCode method

Future<Uint8List> compileCode(
  1. Locations locations
)

Implementation

Future<Uint8List> compileCode(Locations locations) async {
  String packageName;
  final pubspecData = loadYaml(await locations.pubspecYaml!.readAsString());
  if (pubspecData is! YamlMap) {
    throw ArgumentError("Could not read pubspec.yaml");
  }
  packageName = pubspecData.toMap()['name'];

  final compiler = Compiler();
  for (final name in ['flutter', 'flutter_map', 'every_door']) {
    await loadBindings(compiler, name);
  }

  Map<String, String> addFiles(Directory dir) {
    final result = <String, String>{};
    if (!dir.existsSync()) return result;
    for (final file in dir.listSync()) {
      if (file is File && file.path.endsWith('.dart')) {
        String fileData = file.readAsStringSync();
        fileData = fileData.replaceAll('package:every_door_plugin/', 'package:every_door/');
        final rel = p
            .relative(file.path, from: locations.codeRoot!.path)
            .replaceAll('\\', '/');
        result[rel] = fileData;
      } else if (file is Directory) {
        result.addAll(addFiles(file));
      }
    }
    return result;
  }

  final data = {packageName: addFiles(locations.codeRoot!)};
  final program = compiler.compile(data);
  return program.write();
}