bitwarden-estensione-browser/libs/common/src/platform/services/migration-runner.ts

39 lines
1.3 KiB
TypeScript

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<void> {
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<void> {
await waitForMigrations(this.diskStorage, this.logService);
}
}