Merge pull request #13128 from Snuffleupagus/BasePreferences-loops

Re-factor how the `BasePreferences.prefs`-property is initialized; remove some *indirect* loops
This commit is contained in:
Tim van der Meij 2021-03-24 20:47:45 +01:00 committed by GitHub
commit 9d0ce6e79f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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;
}
}