import fs from "fs"; import $ from "./lib"; const Storage = { read(header: string): object { this.open("data"); const path = `data/${header}.json`; let data = {}; if (fs.existsSync(path)) { const file = fs.readFileSync(path, "utf-8"); try { data = JSON.parse(file); } catch (error) { if (process.argv[2] !== "dev") { $.warn( `Malformed JSON data (header: ${header}), backing it up.`, file ); fs.writeFile( `${path}.backup`, file, generateHandler( `Backup file of "${header}" successfully written as ${file}.` ) ); } } } return data; }, write(header: string, data: object, asynchronous = true) { this.open("data"); const path = `data/${header}.json`; if (process.argv[2] === "dev" || header === "config") { const result = JSON.stringify(data, null, "\t"); if (asynchronous) fs.writeFile( path, result, generateHandler( `"${header}" sucessfully spaced and written.` ) ); else fs.writeFileSync(path, result); } else { const result = JSON.stringify(data); if (asynchronous) fs.writeFile( path, result, generateHandler(`"${header}" sucessfully written.`) ); else fs.writeFileSync(path, result); } }, open( path: string, filter?: (value: string, index: number, array: string[]) => unknown ): string[] { if (!fs.existsSync(path)) fs.mkdirSync(path); let directory = fs.readdirSync(path); if (filter) directory = directory.filter(filter); return directory; }, close(path: string) { if (fs.existsSync(path) && fs.readdirSync(path).length === 0) fs.rmdir(path, generateHandler(`"${path}" successfully closed.`)); } }; export function generateHandler(message: string) { return (error: Error | null) => { if (error) $.error(error); else $.debug(message); }; } export default Storage;