const fs = require("node:fs") const path = require("node:path") let launcherDataPath = path.join(__dirname, ".catboat") const baseSettings = { ram: { max: 1024 }, auth: { token: "", type: "msa", clientToken: "" } } function initSettings($launcherDataPath) { launcherDataPath = $launcherDataPath if (!fs.existsSync(launcherDataPath)) { try { fs.mkdirSync(launcherDataPath) } catch (error) { throw error } } if (!fs.existsSync(path.join(launcherDataPath, "launcher_settings.json"))) { try { fs.writeFileSync(path.join(launcherDataPath, "launcher_settings.json"), JSON.stringify(baseSettings, null, 4)) } catch (error) { throw error } } } function getLauncherDataPath() { return launcherDataPath } function writeSettings(settings) { try { fs.writeFileSync(path.join(launcherDataPath, "launcher_settings.json"), JSON.stringify(settings, null, 4)) return } catch (error) { clean() return writeSettings(settings) } } function get(key) { try { const settings = JSON.parse(fs.readFileSync(path.join(launcherDataPath, "launcher_settings.json"))) const keys = key.split(".") let value = settings for (const k of keys) { if (value[k] !== undefined) { value = value[k] } else { throw new Error(`La clé '${key}' n'existe pas.`) } } return value } catch (error) { clean() return get(key) } } function set(key, newValue) { try { const filePath = path.join(launcherDataPath, "launcher_settings.json") const settings = JSON.parse(fs.readFileSync(filePath)) const keys = key.split(".") let obj = settings for (let i = 0; i < keys.length - 1; i++) { const k = keys[i] if (!obj[k]) { obj[k] = {} } obj = obj[k] } obj[keys[keys.length - 1]] = newValue fs.writeFileSync(filePath, JSON.stringify(settings, null, 4)) } catch (error) { clean() return set(ke, value) } } function clean() { try { fs.writeFileSync(path.join(launcherDataPath, "launcher_settings.json"), JSON.stringify(baseSettings, null, 4)) return } catch (error) { throw error } } function readSettings() { try { return JSON.parse(fs.readFileSync(path.join(launcherDataPath, "launcher_settings.json"))) } catch (error) { clean() return readSettings() } } module.exports = { getLauncherDataPath, writeSettings, readSettings, initSettings, clean, get, set, }