diff --git a/src/helpers/filehandler.ts b/src/helpers/filehandler.ts index f07625b..4a604ed 100644 --- a/src/helpers/filehandler.ts +++ b/src/helpers/filehandler.ts @@ -1,7 +1,6 @@ -import { project } from "@/utility"; import { PathOrFileDescriptor, readFileSync, writeFileSync } from "node:fs"; -export class FileHandler { +export abstract class FileHandler { protected _value: T public get value(): T { return this._value; @@ -13,8 +12,7 @@ export class FileHandler { constructor(public path: PathOrFileDescriptor, public settings?: { defaultContent?: T, - name?: string, - project?: (keyof T)[] | { [key in keyof T]: any} + name?: string }) { try { this._value = JSON.parse(readFileSync(path, 'utf-8')) @@ -32,11 +30,17 @@ export class FileHandler { } private save() { - writeFileSync(this.path, JSON.stringify(project(this._value, this.settings.project), undefined, 2)) + writeFileSync(this.path, JSON.stringify(this.construct(this._value), undefined, 2)) } public reload() { this._value = JSON.parse(readFileSync(this.path, { encoding: "utf-8" })) console.log(`Reloaded ${this.settings.name}`); } + + /** + * Method that makes sure that object is the interface. + * @param value Input object + */ + abstract construct(value: T | any): T } \ No newline at end of file diff --git a/src/helpers/usettings.ts b/src/helpers/usettings.ts index 3777fd8..2ddf399 100644 --- a/src/helpers/usettings.ts +++ b/src/helpers/usettings.ts @@ -1,5 +1,3 @@ -import { project } from "@/utility"; -import { readFileSync, writeFileSync } from "node:fs"; import { FileHandler } from "./filehandler"; export interface IUSettings { @@ -22,6 +20,26 @@ export interface IUSettings { } class UOptions extends FileHandler { + construct(value: IUSettings | any): IUSettings { + return { + keyrooms: value.keyrooms ?? [], + rooms: value.rooms ?? [], + cleanThings: value.cleanThings ?? [], + menu: { + defaultItems: { + sn: value.menu.defaultItems.sn ?? [], + kol: value.menu.defaultItems.kol ?? [] + } + }, + security: { + loginTimeout: { + attempts: value.security.loginTimeout.attempts ?? 0, + time: value.security.loginTimeout.time ?? 0, + lockout: value.security.loginTimeout.lockout ?? 0 + } + } + } + } constructor() { const defaultSettings: IUSettings = { keyrooms: [], @@ -41,7 +59,7 @@ class UOptions extends FileHandler { } } } - super("./config/usettings.json", {defaultContent: defaultSettings, name: "user settings", project: ['cleanThings', 'keyrooms', 'menu', 'rooms', 'security']}) + super("./config/usettings.json", {defaultContent: defaultSettings, name: "user settings"}) } }