File size: 1,832 Bytes
43a06dc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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<number, Migrator> = {
    [3]: (settings: AllPartialSettingsWithSchema) => {
        const out = settings as RecursivePartial<CobaltSettingsV3>;
        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<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 = (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;
};