commit abe7692c971a64f0ab74bd03da764d474013bdfe
parent 3c8ee1c288fa100b17779e6e78917969a92fa13e
Author: mark <mkennedy@mozilla.com>
Date: Wed, 1 Oct 2025 18:43:57 +0000
Bug 1990504 - Fix and import Setting and Preference types to avoid them being implicitly any r=hjones
Differential Revision: https://phabricator.services.mozilla.com/D266008
Diffstat:
5 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/browser/components/preferences/widgets/setting-control/setting-control.mjs b/browser/components/preferences/widgets/setting-control/setting-control.mjs
@@ -18,6 +18,7 @@ import {
import { MozLitElement } from "chrome://global/content/lit-utils.mjs";
/** @import MozCheckbox from "../../../../../toolkit/content/widgets/moz-checkbox/moz-checkbox.mjs"*/
+/** @import { Setting } from "chrome://global/content/preferences/Setting.mjs"; */
/**
* A Lit directive that applies all properties of an object to a DOM element.
diff --git a/browser/components/preferences/widgets/setting-group/setting-group.mjs b/browser/components/preferences/widgets/setting-group/setting-group.mjs
@@ -5,6 +5,9 @@
import { html, ifDefined } from "chrome://global/content/vendor/lit.all.mjs";
import { MozLitElement } from "chrome://global/content/lit-utils.mjs";
+/** @import { SettingControl } from "../setting-control/setting-control.mjs"; */
+/** @import {PreferencesSettingsConfig, Preferences} from "chrome://global/content/preferences/Preferences.mjs" */
+
const CLICK_HANDLERS = new Set([
"dialog-button",
"moz-box-button",
@@ -14,10 +17,24 @@ const CLICK_HANDLERS = new Set([
]);
export class SettingGroup extends MozLitElement {
+ /**
+ * @type {PreferencesSettingsConfig | undefined}
+ */
+ config;
+
+ /**
+ * @type {Preferences['getSetting'] | undefined}
+ */
+ getSetting;
+
+ /**
+ * @type {Array<SettingControl>}
+ */
+ controlEls;
+
static properties = {
config: { type: Object },
groupId: { type: String },
- // getSetting should be Preferences.getSetting from preferencesBindings.js
getSetting: { type: Function },
};
@@ -55,6 +72,9 @@ export class SettingGroup extends MozLitElement {
control?.onClick(e);
}
+ /**
+ * @param {PreferencesSettingsConfig} item
+ */
itemTemplate(item) {
let setting = this.getSetting(item.id);
return html`<setting-control
diff --git a/toolkit/content/preferences/AsyncSetting.mjs b/toolkit/content/preferences/AsyncSetting.mjs
@@ -98,7 +98,7 @@ export class AsyncSettingHandler {
/** @type {Function} */
#emitChange;
- /** @type {Record<string, Setting>} */
+ /** @type {import("./Setting.mjs").PreferenceSettingDepsMap} */
deps;
/** @type {Setting} */
diff --git a/toolkit/content/preferences/Preferences.mjs b/toolkit/content/preferences/Preferences.mjs
@@ -6,16 +6,13 @@ import { AsyncSetting } from "chrome://global/content/preferences/AsyncSetting.m
import { Preference } from "chrome://global/content/preferences/Preference.mjs";
import { Setting } from "chrome://global/content/preferences/Setting.mjs";
-/**
- * A map of Setting instances (values) along with their IDs
- * (keys) so that the dependencies of a setting can
- * be easily looked up by just their ID.
- *
- * @typedef {Record<string, Setting>} PreferenceSettingDepsMap
- */
+/** @import {PreferenceConfigInfo} from "chrome://global/content/preferences/Preference.mjs" */
+/** @import {PreferenceSettingDepsMap} from "chrome://global/content/preferences/Setting.mjs" */
/**
* @callback PreferenceSettingVisibleFunction
+ * @param {PreferenceSettingDepsMap} deps
+ * @param {Setting} setting
* @returns {boolean | string | undefined} If truthy shows the setting in the UI, or hides it if not
*/
@@ -25,7 +22,7 @@ import { Setting } from "chrome://global/content/preferences/Setting.mjs";
* @callback PreferenceSettingGetter
* @param {string | number} val - The value that was retrieved from the preferences backend
* @param {PreferenceSettingDepsMap} deps
- * @param {Setting} setting*
+ * @param {Setting} setting
* @returns {any} - The value to set onto the setting
*/
@@ -49,7 +46,6 @@ import { Setting } from "chrome://global/content/preferences/Setting.mjs";
/**
* @callback PreferencesSettingConfigDisabledFunction
- * @param {string} val - The value/pressed/checked from the input of the control associated with the setting
* @param {PreferenceSettingDepsMap} deps
* @param {Setting} setting
* @returns {boolean}
diff --git a/toolkit/content/preferences/Setting.mjs b/toolkit/content/preferences/Setting.mjs
@@ -9,6 +9,7 @@ import {
import { Preferences } from "chrome://global/content/preferences/Preferences.mjs";
/** @import { type Preference } from "chrome://global/content/preferences/Preference.mjs" */
+/** @import { PreferencesSettingsConfig } from "chrome://global/content/preferences/Preferences.mjs" */
const { EventEmitter } = ChromeUtils.importESModule(
"resource://gre/modules/EventEmitter.sys.mjs"
@@ -27,7 +28,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
* (keys) so that the dependencies of a setting can
* be easily looked up by just their ID.
*
- * @typedef {Record<string, any>} PreferenceSettingDepsMap
+ * @typedef {Record<string, Setting | undefined>} PreferenceSettingDepsMap
*/
export class Setting extends EventEmitter {