diff --git a/web/src/lib/state/settings.ts b/web/src/lib/state/settings.ts index 79dfdc31..e19c50bb 100644 --- a/web/src/lib/state/settings.ts +++ b/web/src/lib/state/settings.ts @@ -1,15 +1,15 @@ import { derived, readable, type Updater } from 'svelte/store'; import { merge } from 'ts-deepmerge'; -import type { RecursivePartial } from '../types/generic'; -import type { CobaltSettings } from '../types/settings'; +import type { + CobaltSettings, + PartialSettings, + AllPartialSettingsWithSchema +} from '../types/settings'; import { migrateOldSettings } from '../settings/migrate'; import defaultSettings from '../settings/defaults'; -type PartialSettings = RecursivePartial; -type PartialSettingsWithSchema = RecursivePartial & { schemaVersion: number }; - const updatePlausiblePreference = (settings: PartialSettings) => { if (settings.privacy?.disableAnalytics) { localStorage.setItem('plausible_ignore', 'true'); @@ -27,18 +27,18 @@ const writeToStorage = (settings: PartialSettings) => { return settings; } -type Migrator = (s: PartialSettings) => PartialSettings; +type Migrator = (s: AllPartialSettingsWithSchema) => AllPartialSettingsWithSchema; const migrations: Record = { } -const migrate = (settings: PartialSettingsWithSchema) => { +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 PartialSettings); + }, settings as AllPartialSettingsWithSchema); } const loadFromStorage = () => { @@ -52,7 +52,7 @@ const loadFromStorage = () => { return {}; } - const parsed = JSON.parse(settings) as PartialSettingsWithSchema; + const parsed = JSON.parse(settings) as AllPartialSettingsWithSchema; if (parsed.schemaVersion < defaultSettings.schemaVersion) { return migrate(parsed); } diff --git a/web/src/lib/types/generic.ts b/web/src/lib/types/generic.ts index a03d969f..9807cea5 100644 --- a/web/src/lib/types/generic.ts +++ b/web/src/lib/types/generic.ts @@ -8,4 +8,4 @@ export type RecursivePartial = { }; export type DefaultImport = () => Promise<{ default: T }>; -export type Optional = T | undefined; \ No newline at end of file +export type Optional = T | undefined; diff --git a/web/src/lib/types/settings.ts b/web/src/lib/types/settings.ts index bfeb2d10..5965bf49 100644 --- a/web/src/lib/types/settings.ts +++ b/web/src/lib/types/settings.ts @@ -1,4 +1,5 @@ import languages from '$i18n/languages.json'; +import type { RecursivePartial } from './generic'; export const themeOptions = ["auto", "light", "dark"] as const; export const audioFormatOptions = ["best", "mp3", "ogg", "wav", "opus"] as const; @@ -37,12 +38,20 @@ type CobaltSettingsSave = { youtubeDubBrowserLang: boolean, }; -export type CobaltSettings = { - schemaVersion: number, +export type CurrentCobaltSettings = { + schemaVersion: 2, advanced: CobaltSettingsAdvanced, appearance: CobaltSettingsAppearance, save: CobaltSettingsSave, privacy: CobaltSettingsPrivacy }; +export type CobaltSettings = CurrentCobaltSettings; + +export type PartialSettings = RecursivePartial; +export type PartialSettingsWithSchema = RecursivePartial & { schemaVersion: number }; + +export type AllSchemaVersions = CurrentCobaltSettings; +export type AllPartialSettingsWithSchema = RecursivePartial & { schemaVersion: number }; + export type DownloadModeOption = CobaltSettings['save']['downloadMode'];