diff --git a/web/preferences.js b/web/preferences.js index 125007031..ea1ffd483 100644 --- a/web/preferences.js +++ b/web/preferences.js @@ -35,25 +35,16 @@ class BasePreferences { enumerable: true, configurable: false, }); - this.prefs = Object.assign(Object.create(null), this.defaults); + this.prefs = Object.create(null); this._initializedPromise = this._readFromStorage(this.defaults).then( prefs => { - if (!prefs) { - return; - } - for (const name in prefs) { - const defaultValue = this.defaults[name], - prefValue = prefs[name]; - // Ignore preferences not present in, or whose types don't match, - // the default values. - if ( - defaultValue === undefined || - typeof prefValue !== typeof defaultValue - ) { - continue; + for (const name in this.defaults) { + const prefValue = prefs?.[name]; + // Ignore preferences whose types don't match the default values. + if (typeof prefValue === typeof this.defaults[name]) { + this.prefs[name] = prefValue; } - this.prefs[name] = prefValue; } } ); @@ -86,7 +77,7 @@ class BasePreferences { */ async reset() { await this._initializedPromise; - this.prefs = Object.assign(Object.create(null), this.defaults); + this.prefs = Object.create(null); return this._writeToStorage(this.defaults); } @@ -114,8 +105,7 @@ class BasePreferences { value = value.toString(); } else { throw new Error( - `Set preference: "${value}" is a ${valueType}, ` + - `expected a ${defaultType}.` + `Set preference: "${value}" is a ${valueType}, expected a ${defaultType}.` ); } } else { @@ -135,18 +125,13 @@ class BasePreferences { */ async get(name) { await this._initializedPromise; - const defaultValue = this.defaults[name]; + const defaultValue = this.defaults[name], + prefValue = this.prefs[name]; if (defaultValue === undefined) { throw new Error(`Get preference: "${name}" is undefined.`); - } else { - const prefValue = this.prefs[name]; - - if (prefValue !== undefined) { - return prefValue; - } } - return defaultValue; + return prefValue !== undefined ? prefValue : defaultValue; } /** @@ -156,7 +141,13 @@ class BasePreferences { */ async getAll() { await this._initializedPromise; - return Object.assign(Object.create(null), this.defaults, this.prefs); + const obj = Object.create(null); + + for (const name in this.defaults) { + const prefValue = this.prefs[name]; + obj[name] = prefValue !== undefined ? prefValue : this.defaults[name]; + } + return obj; } }