diff --git a/docs/src/build.md b/docs/src/build.md index 6cb04e8..1fa9cde 100644 --- a/docs/src/build.md +++ b/docs/src/build.md @@ -238,25 +238,16 @@ Relies on the `zotero-types` package to provide type declarations for `Zotero.Pr You can also use the following helper to get or set preferences while omitting the prefix, simplifying your code. ```ts -const PREFS_PREFIX = "extensions.myPlugin"; - -/** - * Get preference value. - * Wrapper of `Zotero.Prefs.get`. - * @param key - */ -export function getPref(key: K) { - return Zotero.Prefs.get(`${PREFS_PREFIX}.${key}` as PluginPrefKey, true); +const PREF_PREFIX = "extensions.myPlugin"; + +type PluginPrefsMap = _ZoteroTypes.Prefs["PluginPrefsMap"]; + +export function getPref(key: K) { + return Zotero.Prefs.get(`${PREF_PREFIX}.${key}`, true) as PluginPrefsMap[K]; } -/** - * Set preference value. - * Wrapper of `Zotero.Prefs.set`. - * @param key - * @param value - */ -export function setPref(key: K, value: PluginPrefsMap[PluginPrefKey]) { - return Zotero.Prefs.set(`${PREFS_PREFIX}.${key}` as PluginPrefKey, value, true); +export function setPref(key: K, value: PluginPrefsMap[K]) { + return Zotero.Prefs.set(`${PREF_PREFIX}.${key}`, value, true); } ``` diff --git a/packages/scaffold/src/core/builder.ts b/packages/scaffold/src/core/builder.ts index 2ab1cf6..36c925c 100644 --- a/packages/scaffold/src/core/builder.ts +++ b/packages/scaffold/src/core/builder.ts @@ -259,7 +259,7 @@ export default class Build extends Base { // Generate prefs.d.ts if (dts) { - const dtsContent = renderPluginPrefsDts(prefsWithoutPrefix, prefix); + const dtsContent = renderPluginPrefsDts(prefsWithoutPrefix); await outputFile(dts, dtsContent, "utf-8"); } diff --git a/packages/scaffold/src/utils/prefs-manager.test.ts b/packages/scaffold/src/utils/prefs-manager.test.ts index 76ff5aa..bc2f393 100644 --- a/packages/scaffold/src/utils/prefs-manager.test.ts +++ b/packages/scaffold/src/utils/prefs-manager.test.ts @@ -203,7 +203,6 @@ describe("renderPluginPrefsDts", () => { "test.string": "hello", "test.number": 42, }; - const prefix = "prefix"; const result = `// Generated by zotero-plugin-scaffold /* prettier-ignore */ @@ -211,19 +210,15 @@ describe("renderPluginPrefsDts", () => { // @ts-nocheck // prettier-ignore -type _PluginPrefsMap = { - "test.string": string; - "test.number": number; -}; - -// prettier-ignore -type PluginPrefKey = \`prefix.\${K}\`; - -// prettier-ignore -type PluginPrefsMap = { - [K in keyof _PluginPrefsMap as PluginPrefKey]: _PluginPrefsMap[K] -}; +declare namespace _ZoteroTypes { + interface Prefs { + PluginPrefsMap: { + "test.string": string; + "test.number": number; + }; + } +} `; - expect(renderPluginPrefsDts(prefs, prefix)).toBe(result); + expect(renderPluginPrefsDts(prefs)).toBe(result); }); }); diff --git a/packages/scaffold/src/utils/prefs-manager.ts b/packages/scaffold/src/utils/prefs-manager.ts index 252903e..fb31f3a 100644 --- a/packages/scaffold/src/utils/prefs-manager.ts +++ b/packages/scaffold/src/utils/prefs-manager.ts @@ -107,35 +107,37 @@ export class PrefsManager { } } -export function renderPluginPrefsDts(prefs: Prefs, prefix: string) { - const dtsContent = `// Generated by zotero-plugin-scaffold +export function renderPluginPrefsDts(prefs: Prefs) { + return `// Generated by zotero-plugin-scaffold /* prettier-ignore */ /* eslint-disable */ // @ts-nocheck // prettier-ignore -type _PluginPrefsMap = { - ${Object.entries(prefs).map(([key, value]) => { - return `"${key}": ${typeof value};`; - }).join("\n ")} -}; - -// prettier-ignore -type PluginPrefKey = \`${prefix}.\${K}\`; - -// prettier-ignore -type PluginPrefsMap = { - [K in keyof _PluginPrefsMap as PluginPrefKey]: _PluginPrefsMap[K] -}; +declare namespace _ZoteroTypes { + interface Prefs { + PluginPrefsMap: { + ${Object.entries(prefs).map(([key, value]) => { + return `"${key}": ${typeof value};`; + }).join("\n ")} + }; + } +} `; - return dtsContent; } -const _backup = ` +/** Backup */ +// // prettier-ignore +// type PluginPrefKey = \`${prefix}.\${K}\`; +// +// // prettier-ignore +// type PluginPrefsMap = { +// [K in keyof _PluginPrefsMap as PluginPrefKey]: _PluginPrefsMap[K] +// }; +// // declare namespace _ZoteroTypes { // interface Prefs { // get: (key: K, global?: boolean) => PluginPrefsMap[K]; // set: (key: K, value: PluginPrefsMap[K], global?: boolean) => any; // } // } -`;