UNPKG

wakitsu

Version:

Hobby project for managing anime watch list on Kitsu through CLI

72 lines 2.52 kB
import { writeFileSync } from 'fs'; import { zodKitsuConfigData } from './kitsu/kitsu-schemas.js'; import { parseWithZod, pathJoin, tryCatchAsync } from './utils.js'; import * as z from 'zod'; import { readFile } from 'fs/promises'; import { Printer } from './printer/printer.js'; let _config = {}; const _configFileName = 'wakitsu.json'; const ConfigSchema = z.object({ useColor: z.boolean(), kitsu: z.object(zodKitsuConfigData), }); export class Config { static get(key) { if (!_config) throw Error('config not initialized'); return _config[key]; } static set(key, val) { _config[key] = val; } static getKitsuProp(key) { if (!_config) throw Error('config not initialized'); return _config.kitsu[key]; } static setKitsuProp(key, val) { if (!_config) throw Error('config not initialized'); _config.kitsu[key] = val; } static setKitsuData(data) { if (!_config) throw Error('config not initialized'); _config.kitsu = data; } static async init(options) { const asyncRes = await tryCatchAsync(readFile(pathJoin(process.cwd(), _configFileName))); if (!asyncRes.success) { if (asyncRes.error.message.includes('ENOENT')) { await options.setupNewConfig(); return Config.save(); } Printer.printError(asyncRes.error.message); process.exit(1); } const respDataObj = JSON.parse(asyncRes.data.toString('utf-8')); const [error, data] = parseWithZod(ConfigSchema, respDataObj, 'ConfigFile'); if (error) { tryUpdateConfig(respDataObj, options.setDefaultProps); return; } _config = data; } static save() { writeFileSync(pathJoin(process.cwd(), _configFileName), JSON.stringify(_config, null, 2)); } } async function tryUpdateConfig(partialConfig, setDefaultProps) { const config = setDefaultProps({ ...partialConfig }); const [error, data] = parseWithZod(ConfigSchema, config, 'ConfigFile'); if (error) { const header = error.shift(); Printer.printError([...error], header); process.exit(1); } _config = data; Printer.printWarning('An older version of the Config file has been discovered and updated ' + 'to reflect latest Wakitsu changes.', 'Config Updated'); Config.save(); } //# sourceMappingURL=config.js.map