import { waitForMigrations } from "../../state-migrations"; import { CURRENT_VERSION, currentVersion } from "../../state-migrations/migrate"; import { MigrationHelper } from "../../state-migrations/migration-helper"; import { LogService } from "../abstractions/log.service"; import { AbstractStorageService } from "../abstractions/storage.service"; import { MigrationBuilderService } from "./migration-builder.service"; export class MigrationRunner { constructor( protected diskStorage: AbstractStorageService, protected logService: LogService, protected migrationBuilderService: MigrationBuilderService, ) {} async run(): Promise { const migrationHelper = new MigrationHelper( await currentVersion(this.diskStorage, this.logService), this.diskStorage, this.logService, "general", ); if (migrationHelper.currentVersion < 0) { // Cannot determine state, assuming empty so we don't repeatedly apply a migration. await this.diskStorage.save("stateVersion", CURRENT_VERSION); return; } const migrationBuilder = this.migrationBuilderService.build(); await migrationBuilder.migrate(migrationHelper); } async waitForCompletion(): Promise { await waitForMigrations(this.diskStorage, this.logService); } }