Future<Schema> schemaByApplyingMigrationFile(File migrationFile, Schema fromSchema)

Source

Future<Schema> schemaByApplyingMigrationFile(File migrationFile, Schema fromSchema) async {
  var sourceFunction =
      (List<String> args, Map<String, dynamic> values) async {
    var inputSchema =
      new Schema.fromMap(values["schema"] as Map<String, dynamic>);

    var versionNumber = int.parse(args.first);
    var migrationClassMirror = currentMirrorSystem()
        .isolate
        .rootLibrary
        .declarations
        .values
        .firstWhere((dm) =>
    dm is ClassMirror && dm.isSubclassOf(reflectClass(Migration)))
    as ClassMirror;

    var migrationInstance = migrationClassMirror
        .newInstance(new Symbol(''), []).reflectee as Migration;
    migrationInstance.database = new SchemaBuilder(null, inputSchema);

    await migrationInstance.upgrade();

    return migrationInstance.currentSchema.asMap();
  };

  var generator = new SourceGenerator(sourceFunction,
      imports: [
        "dart:async",
        "package:aqueduct/aqueduct.dart",
        "dart:isolate",
        "dart:mirrors"
      ],
      additionalContents: migrationFile.readAsStringSync());

  var schemaMap = await IsolateExecutor.executeSource(generator,
      ["${versionNumberFromFile(migrationFile)}"], projectDirectory.uri,
      message: {"schema": fromSchema.asMap()});

  return new Schema.fromMap(schemaMap as Map<String, dynamic>);
}