load static method 
    
    
    
  Implementation
  static Future<MigrationVersion> load({
  required String moduleName,
  required String versionName,
  required Directory projectDirectory,
}) async {
  try {
    // Get the serialization manager
    var serializationManager = Protocol();
    // Load the database definition
    var databaseDefinitionProjectPath =
        MigrationConstants.databaseDefinitionProjectJSONPath(
      projectDirectory,
      versionName,
    );
    var databaseDefinitionProject =
        await _readMigrationDataFile<DatabaseDefinition>(
      databaseDefinitionProjectPath,
      serializationManager,
    );
    var databaseDefinitionPath =
        MigrationConstants.databaseDefinitionJSONPath(
      projectDirectory,
      versionName,
    );
    var databaseDefinition = await _readMigrationDataFile<DatabaseDefinition>(
      databaseDefinitionPath,
      serializationManager,
    );
    // Load the migration definition
    var migrationPath = MigrationConstants.databaseMigrationJSONPath(
      projectDirectory,
      versionName,
    );
    var migrationDefinition = await _readMigrationDataFile<DatabaseMigration>(
      migrationPath,
      serializationManager,
    );
    return MigrationVersion(
      moduleName: moduleName,
      projectDirectory: projectDirectory,
      versionName: versionName,
      migration: migrationDefinition,
      databaseDefinitionProject: databaseDefinitionProject,
      databaseDefinitionFull: databaseDefinition,
    );
  } catch (e) {
    throw MigrationVersionLoadException(
      versionName: versionName,
      moduleName: moduleName,
      exception: e.toString(),
    );
  }
}