Skip to content

Commit b0650d5

Browse files
authored
fix!: mv PluginPrefsMap to _ZoteroTypes.Prefs (#89)
1 parent f978592 commit b0650d5

File tree

4 files changed

+38
-50
lines changed

4 files changed

+38
-50
lines changed

docs/src/build.md

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -238,25 +238,16 @@ Relies on the `zotero-types` package to provide type declarations for `Zotero.Pr
238238
You can also use the following helper to get or set preferences while omitting the prefix, simplifying your code.
239239

240240
```ts
241-
const PREFS_PREFIX = "extensions.myPlugin";
242-
243-
/**
244-
* Get preference value.
245-
* Wrapper of `Zotero.Prefs.get`.
246-
* @param key
247-
*/
248-
export function getPref<K extends keyof _PluginPrefsMap>(key: K) {
249-
return Zotero.Prefs.get(`${PREFS_PREFIX}.${key}` as PluginPrefKey<K>, true);
241+
const PREF_PREFIX = "extensions.myPlugin";
242+
243+
type PluginPrefsMap = _ZoteroTypes.Prefs["PluginPrefsMap"];
244+
245+
export function getPref<K extends keyof PluginPrefsMap>(key: K) {
246+
return Zotero.Prefs.get(`${PREF_PREFIX}.${key}`, true) as PluginPrefsMap[K];
250247
}
251248

252-
/**
253-
* Set preference value.
254-
* Wrapper of `Zotero.Prefs.set`.
255-
* @param key
256-
* @param value
257-
*/
258-
export function setPref<K extends keyof _PluginPrefsMap>(key: K, value: PluginPrefsMap[PluginPrefKey<K>]) {
259-
return Zotero.Prefs.set(`${PREFS_PREFIX}.${key}` as PluginPrefKey<K>, value, true);
249+
export function setPref<K extends keyof PluginPrefsMap>(key: K, value: PluginPrefsMap[K]) {
250+
return Zotero.Prefs.set(`${PREF_PREFIX}.${key}`, value, true);
260251
}
261252
```
262253

packages/scaffold/src/core/builder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ export default class Build extends Base {
259259

260260
// Generate prefs.d.ts
261261
if (dts) {
262-
const dtsContent = renderPluginPrefsDts(prefsWithoutPrefix, prefix);
262+
const dtsContent = renderPluginPrefsDts(prefsWithoutPrefix);
263263
await outputFile(dts, dtsContent, "utf-8");
264264
}
265265

packages/scaffold/src/utils/prefs-manager.test.ts

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -203,27 +203,22 @@ describe("renderPluginPrefsDts", () => {
203203
"test.string": "hello",
204204
"test.number": 42,
205205
};
206-
const prefix = "prefix";
207206

208207
const result = `// Generated by zotero-plugin-scaffold
209208
/* prettier-ignore */
210209
/* eslint-disable */
211210
// @ts-nocheck
212211
213212
// prettier-ignore
214-
type _PluginPrefsMap = {
215-
"test.string": string;
216-
"test.number": number;
217-
};
218-
219-
// prettier-ignore
220-
type PluginPrefKey<K extends keyof _PluginPrefsMap> = \`prefix.\${K}\`;
221-
222-
// prettier-ignore
223-
type PluginPrefsMap = {
224-
[K in keyof _PluginPrefsMap as PluginPrefKey<K>]: _PluginPrefsMap[K]
225-
};
213+
declare namespace _ZoteroTypes {
214+
interface Prefs {
215+
PluginPrefsMap: {
216+
"test.string": string;
217+
"test.number": number;
218+
};
219+
}
220+
}
226221
`;
227-
expect(renderPluginPrefsDts(prefs, prefix)).toBe(result);
222+
expect(renderPluginPrefsDts(prefs)).toBe(result);
228223
});
229224
});

packages/scaffold/src/utils/prefs-manager.ts

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -107,35 +107,37 @@ export class PrefsManager {
107107
}
108108
}
109109

110-
export function renderPluginPrefsDts(prefs: Prefs, prefix: string) {
111-
const dtsContent = `// Generated by zotero-plugin-scaffold
110+
export function renderPluginPrefsDts(prefs: Prefs) {
111+
return `// Generated by zotero-plugin-scaffold
112112
/* prettier-ignore */
113113
/* eslint-disable */
114114
// @ts-nocheck
115115
116116
// prettier-ignore
117-
type _PluginPrefsMap = {
118-
${Object.entries(prefs).map(([key, value]) => {
119-
return `"${key}": ${typeof value};`;
120-
}).join("\n ")}
121-
};
122-
123-
// prettier-ignore
124-
type PluginPrefKey<K extends keyof _PluginPrefsMap> = \`${prefix}.\${K}\`;
125-
126-
// prettier-ignore
127-
type PluginPrefsMap = {
128-
[K in keyof _PluginPrefsMap as PluginPrefKey<K>]: _PluginPrefsMap[K]
129-
};
117+
declare namespace _ZoteroTypes {
118+
interface Prefs {
119+
PluginPrefsMap: {
120+
${Object.entries(prefs).map(([key, value]) => {
121+
return `"${key}": ${typeof value};`;
122+
}).join("\n ")}
123+
};
124+
}
125+
}
130126
`;
131-
return dtsContent;
132127
}
133128

134-
const _backup = `
129+
/** Backup */
130+
// // prettier-ignore
131+
// type PluginPrefKey<K extends keyof _PluginPrefsMap> = \`${prefix}.\${K}\`;
132+
//
133+
// // prettier-ignore
134+
// type PluginPrefsMap = {
135+
// [K in keyof _PluginPrefsMap as PluginPrefKey<K>]: _PluginPrefsMap[K]
136+
// };
137+
//
135138
// declare namespace _ZoteroTypes {
136139
// interface Prefs {
137140
// get: <K extends keyof PluginPrefsMap>(key: K, global?: boolean) => PluginPrefsMap[K];
138141
// set: <K extends keyof PluginPrefsMap>(key: K, value: PluginPrefsMap[K], global?: boolean) => any;
139142
// }
140143
// }
141-
`;

0 commit comments

Comments
 (0)