svelte-settings
Version:
> [!WARNING] > This project is a work in progress. Do not use it in any of your projects yet.
29 lines (28 loc) • 1.31 kB
JavaScript
export function performMigrations({ migrations, remigrate }) {
console.debug('Checking for settings migrations...');
let settings = JSON.parse(localStorage.getItem('settings') ?? '{}');
let version = settings.configVersion;
if (typeof version !== 'number' || remigrate)
version = 0;
const initialVersion = version;
const requiredMigrationSteps = migrations.slice(version + 1);
if (!requiredMigrationSteps.length) {
console.debug(`No settings migration required from version ${version}!`);
return;
}
console.debug(settings);
for (const migrationStep of requiredMigrationSteps) {
console.debug(`Performing migrations from version ${version}, ${migrationStep.length} tasks...`);
for (const migration of migrationStep) {
console.debug(migration.description);
settings = migration.callback(settings);
}
version += 1;
}
console.debug('Writing migrated settings to localStorage...');
settings.configVersion = version;
localStorage.setItem('settings', JSON.stringify(settings));
console.info(`Successfully migrated settings from ${initialVersion} to ${version}!`);
// NOTE: reload is not required when the migration is performed in a hook
// window.location.reload()
}