varo-website/src/util/settings.ts
bytedream 60f3f8a096
Some checks failed
deploy / build-and-deploy (push) Failing after 21s
initial commit
2025-05-18 13:16:20 +02:00

51 lines
1.9 KiB
TypeScript

import type { Database } from '@db/database.ts';
export async function setSettings<K extends SettingKey>(db: Database, settings: { [k in K]: SettingKeyValueType<K> }) {
const dbSettings = Object.entries(settings).map(([name, value]) => ({ name, value: JSON.stringify(value) }));
await db.setSettings({ settings: dbSettings });
}
export async function getSetting<K extends SettingKey>(db: Database, key: K): Promise<SettingKeyValueType<K> | null>;
export async function getSetting<K extends SettingKey, D extends SettingKeyValueType<K>>(
db: Database,
key: K,
defaultValue: D
): Promise<SettingKeyValueType<K>>;
export async function getSetting<K extends SettingKey, D extends SettingKeyValueType<K>>(
db: Database,
key: K,
defaultValue?: D
) {
const setting = await db.getSetting({ name: key });
return setting != null ? JSON.parse(setting) : defaultValue != undefined ? defaultValue : null;
}
export async function getSettings<K extends SettingKey>(
db: Database
): Promise<{ [k in K]: SettingKeyValueType<K> | null }>;
export async function getSettings<K extends SettingKey[]>(
db: Database,
keys: K
): Promise<{ [k in K[number]]: SettingKeyValueType<k> | null }>;
export async function getSettings<K extends SettingKey[]>(db: Database, keys?: K) {
const settings = await db.getSettings({ names: keys });
return settings.reduce(
(prev, curr) => Object.assign(prev, { [curr.name]: curr.value != null ? JSON.parse(curr.value) : null }),
{} as { [k in K[number]]: SettingKeyValueType<k> | null }
);
}
export enum SettingKey {
SignupEnabled = 'signup.enabled',
SignupDisabledMessage = 'signup.disabledMessage',
SignupDisabledSubMessage = 'signup.disabledSubMessage'
}
export type SettingKeyValueType<K extends SettingKey> = {
[SettingKey.SignupEnabled]: boolean;
[SettingKey.SignupDisabledMessage]: string;
[SettingKey.SignupDisabledSubMessage]: string;
}[K];