migrationSource function
Emits a reviewed migration and its fixed fingerprint as ordinary Dart values. Formatting/comments are not part of the fingerprint; SQL and operation data are.
Implementation
String migrationSource(Migration migration) =>
'''
// Review before applying. Applied migrations must remain unchanged.
import 'package:orm/migrate.dart';
import 'package:orm/driver.dart';
${_schemaImports([
...?migration.snapshot?.tables,
for (final step in migration.steps) ...switch (step) {
Backfill(:final table) => [table],
CheckedTableSql(:final before, :final after) => [?before, ?after],
RebuildTable(:final before, :final after) => [before, after],
_ => <TableSchema>[],
},
])}
const migrationChecksum = ${_dartValue(migration.checksum)};
final migration = Migration.steps(
${_dartValue(migration.id)},
[${migration.steps.map(_stepSource).join(', ')}],
dialect: SqlDialect.${migration.dialect.name},
${migration.previous == null ? '' : 'previous: ${_dartValue(migration.previous)},'}
${migration.snapshot == null ? '' : 'snapshot: _schema,'}
);
${migration.snapshot == null ? '' : '\nfinal _schema = ${_snapshotSource(migration.snapshot!)};'}
''';