migrationHistorySource function

String migrationHistorySource(
  1. Iterable<String> ids, {
  2. required SqlDialect dialect,
})

Emits a static registry. Each file owns its recorded fingerprint so rebuilding this registry does not silently accept edited migration definitions.

Implementation

String migrationHistorySource(
  Iterable<String> ids, {
  required SqlDialect dialect,
}) {
  final names = ids.toList();
  if (names.toSet().length != names.length ||
      names.any((id) => !RegExp(r'^[0-9]+_[a-z][a-z0-9_]*$').hasMatch(id))) {
    throw ArgumentError('Use distinct migration IDs in version order.');
  }
  return '''
// GENERATED CODE - DO NOT MODIFY BY HAND.
import 'package:orm/migrate.dart';
${[for (var i = 0; i < names.length; i++) "import 'm${names[i]}.dart' as m$i;"].join('\n')}

const migrationDialect = SqlDialect.${dialect.name};
final migrationHistory = MigrationHistory([
  ${[for (var i = 0; i < names.length; i++) '(m$i.migration, m$i.migrationChecksum),'].join('\n')}
], dialect: migrationDialect);
''';
}