import type { BooleanSetting, ButtonSetting, NumberSetting, SelectSetting, StringSetting, HotkeySetting, ComponentSetting, } from "./types"; export function numberSetting( options: Omit, ): NumberSetting { return { type: "number", ...options, }; } export function booleanSetting( options: Omit, ): BooleanSetting { return { type: "boolean", ...options, }; } export function stringSetting( options: Omit, ): StringSetting { return { type: "string", ...options, }; } export function selectSetting( options: Omit, "type">, ): SelectSetting { return { type: "select", ...options, }; } export function buttonSetting( options: Omit, ): ButtonSetting { return { type: "button", ...options, }; } export function componentSetting( options: Omit, ): ComponentSetting { return { type: "component", ...options, }; } export function hotkeySetting( options: Omit, ): HotkeySetting { return { type: "hotkey", ...options, }; } export function defineSettings>(settings: T): T { return settings; } export function Setting(settingDef: any): PropertyDecorator { return (target, propertyKey) => { const proto = target.constructor.prototype; if (!proto.hasOwnProperty("settings")) { Object.defineProperty(proto, "settings", { value: {}, writable: true, configurable: true, enumerable: true, }); } proto.settings[propertyKey] = settingDef; }; }