generate method
Implementation
Future<void> generate() async {
final outputDir = config.outputDirectory;
final dbFileName = config.databaseName;
final List<_MigrationInfo> foundMigrations = [];
final fullMigrationsPath = p.join(
outputDir,
config.sqliteMigrationsSubDir,
); // Corrected
final migrationsDir = Directory(fullMigrationsPath);
if (await migrationsDir.exists()) {
try {
final entities = await migrationsDir.list().toList();
for (final entity in entities) {
if (entity is File) {
final filename = p.basename(entity.path);
final match = _migrationFileRegex.firstMatch(filename);
if (match != null) {
final versionStr = match.group(1)!; // e.g., "0000"
final suffixIdentifier = match.group(
2,
); // e.g., "core_feed" or null
try {
final version = int.parse(versionStr);
foundMigrations.add(
_MigrationInfo(
version: version,
versionPadded: versionStr,
suffixIdentifier: suffixIdentifier,
fileNameWithExtension: filename,
),
);
} catch (e) {
_logger.warning(
'Could not parse version from migration filename: $filename',
);
}
}
}
}
foundMigrations.sort(); // Sort by version
if (foundMigrations.isNotEmpty) {
_logger.info(
'Found ${foundMigrations.length} migrations. Latest version: ${foundMigrations.last.version}',
);
} else {
_logger.info('No migrations found in ${migrationsDir.path}.');
}
} catch (e) {
_logger.severe(
'Error scanning migrations directory ${migrationsDir.path}: $e',
);
}
} else {
_logger.warning(
'Migrations directory ${migrationsDir.path} not found. Assuming no migrations.',
);
}
final int latestNumericVersion =
foundMigrations.isNotEmpty ? foundMigrations.last.version : 0;
final interfaceContent = _generateInterfaceFileContent();
final nativeContent = _generateNativeFileContent(
dbFileName,
foundMigrations,
config.sqliteMigrationsSubDir,
); // Corrected
final webContent = _generateWebFileContent(
dbFileName,
foundMigrations,
config.sqliteMigrationsSubDir,
); // Corrected
final mainDbContent = _generateMainDatabaseFileContent(
latestNumericVersion,
); // Pass latestNumericVersion if needed by sqflite_common_ffi_web
await _writeFile(
p.join(outputDir, _interfaceFileName),
interfaceContent,
'Interface',
);
await _writeFile(
p.join(outputDir, _nativeFileName),
nativeContent,
'Native DB',
);
await _writeFile(p.join(outputDir, _webFileName), webContent, 'Web DB');
await _writeFile(
p.join(outputDir, _mainDbFileName),
mainDbContent,
'Main DB',
);
_logger.info(
'Database files generated successfully in directory: $outputDir',
);
}