UNPKG

cross-tools

Version:

Cross-platform fundamental tools for developers

1 lines 1.74 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const tslib_1=require("tslib"),path_1=tslib_1.__importDefault(require("path")),os_1=tslib_1.__importDefault(require("os")),fs_1=tslib_1.__importDefault(require("fs")),joi_1=tslib_1.__importDefault(require("joi")),colors_1=tslib_1.__importDefault(require("colors")),schema={updateCheckIntervalInDays:joi_1.default.number().required(),lastUpdateCheck:joi_1.default.date().required(),checkForLocalInstallationOnBoot:joi_1.default.boolean().required()};class Config{constructor(){this.configFileName="config.json",this.configFolderPath=path_1.default.join(os_1.default.homedir(),".config","cross-tools"),this.configFilePath=path_1.default.join(this.configFolderPath,this.configFileName),this.state={updateCheckIntervalInDays:2,lastUpdateCheck:0,checkForLocalInstallationOnBoot:!0}}init(){if(fs_1.default.existsSync(this.configFilePath))try{const t=require(this.configFilePath),{error:e}=joi_1.default.object(schema).validate(t);if(e)throw e;this.state=t}catch(t){console.log(t.message),console.log(colors_1.default.red("Invalid configuration. Overwrittng with default configuration?")),fs_1.default.writeFileSync(this.configFilePath,JSON.stringify(this.state,null,2))}else this.sync()}update(t,e){if(!(t in schema))throw new Error("unknown config requested");{const{error:i}=schema[t].validate(e);if(i)throw i;this.state=Object.assign(Object.assign({},this.state),{[t]:e}),this.sync()}}sync(){const{error:t}=joi_1.default.object(schema).validate(this.state);if(t)throw t;fs_1.default.mkdirSync(this.configFolderPath,{recursive:!0}),fs_1.default.writeFileSync(this.configFilePath,JSON.stringify(this.state,null,2))}}const config=new Config;config.init(),exports.default=config;