import type { RecursivePartial } from "$lib/types/generic"; import type { AllPartialSettingsWithSchema, CobaltSettingsV3, CobaltSettingsV4, PartialSettings, } from "$lib/types/settings"; import { getBrowserLanguage } from "$lib/settings/youtube-lang"; type Migrator = (s: AllPartialSettingsWithSchema) => AllPartialSettingsWithSchema; const migrations: Record = { [3]: (settings: AllPartialSettingsWithSchema) => { const out = settings as RecursivePartial; out.schemaVersion = 3; if (settings?.save && "youtubeDubBrowserLang" in settings.save) { if (settings.save.youtubeDubBrowserLang) { out.save!.youtubeDubLang = getBrowserLanguage(); } delete settings.save.youtubeDubBrowserLang; } return out as AllPartialSettingsWithSchema; }, [4]: (settings: AllPartialSettingsWithSchema) => { const out = settings as RecursivePartial; out.schemaVersion = 4; if (settings?.processing) { if ("allowDefaultOverride" in settings.processing) { delete settings.processing.allowDefaultOverride; } if ("seenOverrideWarning" in settings.processing) { delete settings.processing.seenOverrideWarning; } } return out as AllPartialSettingsWithSchema; }, }; export const migrate = (settings: AllPartialSettingsWithSchema): PartialSettings => { return Object.keys(migrations) .map(Number) .filter((version) => version > settings.schemaVersion) .reduce((settings, migrationVersion) => { return migrations[migrationVersion](settings); }, settings as AllPartialSettingsWithSchema) as PartialSettings; };