diff --git a/src/state/persisted/__tests__/schema.test.ts b/src/state/persisted/__tests__/schema.test.ts index f08da4ccb..be8aa8ebf 100644 --- a/src/state/persisted/__tests__/schema.test.ts +++ b/src/state/persisted/__tests__/schema.test.ts @@ -50,6 +50,16 @@ describe('persisted schema helpers', () => { expect(normalizeData(parsed!).downloadFormat).toBe(defaults.downloadFormat) }) + it('preserves external embed prefs when defaults object is empty', () => { + const parsed = tryParse(JSON.stringify(partialState)) + + expect(parsed).toBeDefined() + expect( + normalizeData({...parsed!, externalEmbeds: {youtube: 'show'}}) + .externalEmbeds, + ).toEqual({youtube: 'show'}) + }) + it('migrates legacy disable metrics booleans to display modes', () => { const parsed = tryParse( JSON.stringify({ diff --git a/src/state/persisted/util.ts b/src/state/persisted/util.ts index e06b06e56..045266db6 100644 --- a/src/state/persisted/util.ts +++ b/src/state/persisted/util.ts @@ -30,6 +30,14 @@ function hydrateRecord>( out[key] = value } } + // Keys stored in data but absent from defaults (e.g. externalEmbeds sources). + for (const key of Object.keys(dataObj) as (keyof T)[]) { + if (key in defaultObj) continue + const value = dataObj[key] + if (value !== undefined) { + out[key] = value + } + } return out }