mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 08:13:42 +00:00
* WIP: safer state migrations Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com> * Add min version check and remove old migrations Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com> * Add rollback and version checking * Add state version move migration * Expand tests and improve typing for Migrations * Remove StateMigration Service * Rewrite version 5 and 6 migrations * Add all but initial migration to supported migrations * Handle stateVersion location in migrator update versions * Move to unique migrations directory * Disallow imports outside of state-migrations * Lint and test fixes * Do not run migrations if we cannot determine state * Fix desktop background StateService build * Document Migration builder class * Add debug logging to migrations * Comment on migrator overrides * Use specific property names * `npm run prettier` 🤖 * Insert new migration * Set stateVersion when creating new globals object * PR comments * Fix migrate imports * Move migration building into `migrate` function * Export current version from migration definitions * Move file version concerns to migrator * Update migrate spec to reflect new version requirements * Fix import paths * Prefer unique state data * Remove unnecessary async * Prefer to not use `any` --------- Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com> Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
27 lines
962 B
TypeScript
27 lines
962 B
TypeScript
import { MinVersion, MIN_VERSION } from "../migrate";
|
|
import { MigrationHelper } from "../migration-helper";
|
|
import { IRREVERSIBLE, Migrator } from "../migrator";
|
|
|
|
export function minVersionError(current: number) {
|
|
return `Your local data is too old to be migrated. Your current state version is ${current}, but minimum version is ${MIN_VERSION}.`;
|
|
}
|
|
|
|
export class MinVersionMigrator extends Migrator<0, MinVersion> {
|
|
constructor() {
|
|
super(0, MIN_VERSION);
|
|
}
|
|
|
|
// Overrides the default implementation to catch any version that may be passed in.
|
|
override shouldMigrate(helper: MigrationHelper): Promise<boolean> {
|
|
return Promise.resolve(helper.currentVersion < MIN_VERSION);
|
|
}
|
|
async migrate(helper: MigrationHelper): Promise<void> {
|
|
if (helper.currentVersion < MIN_VERSION) {
|
|
throw new Error(minVersionError(helper.currentVersion));
|
|
}
|
|
}
|
|
async rollback(helper: MigrationHelper): Promise<void> {
|
|
throw IRREVERSIBLE;
|
|
}
|
|
}
|