strata-storage
Version:
Zero-dependency universal storage plugin providing a unified API for all storage operations across web, Android, and iOS platforms
44 lines (43 loc) • 1.54 kB
JavaScript
/**
* Migration utilities for storage upgrades
*/
export class MigrationManager {
migrations = [];
register(migration) {
this.migrations.push(migration);
this.migrations.sort((a, b) => a.version - b.version);
}
async migrate(adapter, targetVersion) {
const currentVersion = await this.getCurrentVersion(adapter);
if (currentVersion === targetVersion)
return;
const migrationsToRun = this.migrations.filter((m) => currentVersion < targetVersion
? m.version > currentVersion && m.version <= targetVersion
: m.version <= currentVersion && m.version > targetVersion);
if (currentVersion < targetVersion) {
for (const migration of migrationsToRun) {
await migration.up(adapter);
await this.setVersion(adapter, migration.version);
}
}
else {
for (const migration of migrationsToRun.reverse()) {
if (migration.down) {
await migration.down(adapter);
}
await this.setVersion(adapter, migration.version - 1);
}
}
}
async getCurrentVersion(adapter) {
const versionData = await adapter.get('__strata_version__');
return versionData?.value || 0;
}
async setVersion(adapter, version) {
await adapter.set('__strata_version__', {
value: version,
created: Date.now(),
updated: Date.now(),
});
}
}