web/settings/migrate: refactor, migrate to v4 schema

why the fuck was tab 2 spaces here
This commit is contained in:
wukko 2024-11-24 00:23:06 +06:00
parent 0b6270e745
commit 57734822ea
No known key found for this signature in database
GPG key ID: 3E30B3F26C7B4AA2

View file

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