import { config } from "../../package.json";
type PluginPrefsMap = _ZoteroTypes.Prefs["PluginPrefsMap"];
const PREFS_PREFIX = config.prefsPrefix;
type PrefValue = string | number | boolean;
function assertValidPrefValue(value: unknown): asserts value is PrefValue {
if (
typeof value !== "string" &&
typeof value !== "number" &&
typeof value !== "boolean"
) {
throw new TypeError(
`Invalid preference value type: ${typeof value}. Expected string, number, or boolean.`,
);
}
}
/**
* Get preference value.
* Wrapper of `Zotero.Prefs.get`.
* @param key
*/
export function getPref<K extends keyof PluginPrefsMap>(key: K) {
return Zotero.Prefs.get(`${PREFS_PREFIX}.${key}`, true) as PluginPrefsMap[K];
}
/**
* Set preference value.
* Wrapper of `Zotero.Prefs.set`.
* @param key
* @param value
*/
export function setPref<K extends keyof PluginPrefsMap>(
key: K,
value: PluginPrefsMap[K],
) {
assertValidPrefValue(value);
return Zotero.Prefs.set(`${PREFS_PREFIX}.${key}`, value, true);
}
/**
* Clear preference value.
* Wrapper of `Zotero.Prefs.clear`.
* @param key
*/
export function clearPref(key: string) {
return Zotero.Prefs.clear(`${PREFS_PREFIX}.${key}`, true);
}