diff --git a/src/state/persisted/__tests__/schema.test.ts b/src/state/persisted/__tests__/schema.test.ts index 7a3b38eca..b51f3463d 100644 --- a/src/state/persisted/__tests__/schema.test.ts +++ b/src/state/persisted/__tests__/schema.test.ts @@ -1,39 +1,36 @@ import {defaults, tryParse, tryStringify} from '../schema' describe('persisted schema helpers', () => { + const partialState = { + colorMode: 'system', + darkTheme: 'dim', + colorScheme: 'material3', + hue: 0, + session: {accounts: []}, + reminders: {}, + languagePrefs: defaults.languagePrefs, + requireAltTextEnabled: true, + invites: {copiedInvites: []}, + onboarding: {step: 'Home'}, + mutedThreads: [], + translationServicePreference: 'google', + postReplacement: { + enabled: false, + postName: 'skeet', + postsName: 'skeets', + }, + } + it('applies schema defaults when reading partial data', () => { - const parsed = tryParse( - JSON.stringify({ - colorMode: 'system', - darkTheme: 'dim', - colorScheme: 'material3', - hue: 0, - session: {accounts: []}, - reminders: {}, - languagePrefs: defaults.languagePrefs, - requireAltTextEnabled: true, - invites: {copiedInvites: []}, - onboarding: {step: 'Home'}, - mutedThreads: [], - translationServicePreference: 'google', - postReplacement: { - enabled: false, - postName: 'skeet', - postsName: 'skeets', - }, - }), - ) + const parsed = tryParse(JSON.stringify(partialState)) expect(parsed?.material3Accent).toBe('#ee6300') expect(parsed?.material3Style).toBe('TONAL_SPOT') }) - it('writes schema defaults back into storage payloads', () => { - const raw = tryStringify({ - ...defaults, - material3Accent: undefined as never, - material3Style: undefined as never, - }) + it('preserves hydrated defaults on later writes', () => { + const hydrated = tryParse(JSON.stringify(partialState)) + const raw = tryStringify(hydrated!) expect(raw).toBeDefined() diff --git a/src/state/persisted/schema.ts b/src/state/persisted/schema.ts index 074c8e539..b1772f764 100644 --- a/src/state/persisted/schema.ts +++ b/src/state/persisted/schema.ts @@ -410,11 +410,11 @@ export function tryParse(rawData: string): Schema | undefined { export function tryStringify(value: Schema): string | undefined { try { - const parsed = schema.parse(value) - return JSON.stringify(parsed) + schema.parse(value) + return JSON.stringify(value) } catch (e) { logger.error(`persisted state: failed stringifying root state`, { - message: e, + safeMessage: String(e), }) return undefined } diff --git a/src/state/preferences/post-name-replacement.tsx b/src/state/preferences/post-name-replacement.tsx index cd77d540d..4a22e57ea 100644 --- a/src/state/preferences/post-name-replacement.tsx +++ b/src/state/preferences/post-name-replacement.tsx @@ -65,13 +65,13 @@ export function Provider({children}: PropsWithChildren<{}>) { useEffect(() => { return persisted.onUpdate('postReplacement', next => { - setState({ + _setState({ postName: next.postName ?? 'skeet', postsName: next.postsName ?? 'skeets', - enabled: next.enabled ?? true, + enabled: next.enabled ?? false, }) }) - }, [setState]) + }, []) return (