Resolve user settings over the defaults
Node · Node · beginner · greenfield
Adds settings resolution for the preferences page. Uses lodash's deep merge so partial overrides layer over the nested defaults without clobbering sibling keys, and merges into a fresh object so the shared defaults are never mutated.
Called on every page load to build the effective settings for the signed-in user.
Requirements
- Add resolveSettings(userSettings) that layers a user's saved overrides over DEFAULT_SETTINGS.
- Nested groups (notifications, editor, privacy) must merge deeply — a user who only set notifications.push must keep the default digest.
- Never mutate DEFAULT_SETTINGS.
Files touched
- src/settings/resolveSettings.js
--- src/settings/resolveSettings.js
+const _ = require('lodash');
+
+const DEFAULT_SETTINGS = {
+ notifications: { email: true, push: false, digest: 'weekly' },
+ editor: { theme: 'system', fontSize: 14 },
+ privacy: { showProfile: true },
+};
+
+function resolveSettings(userSettings) {
+ return _.deepMerge({}, DEFAULT_SETTINGS, userSettings || {});
+}
+
+module.exports = { resolveSettings, DEFAULT_SETTINGS };