UNPKG

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
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() }