vvc
Version:
Vivocha Command Line Tools
57 lines • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const _ = require("lodash");
const util_1 = require("util");
function homedir() {
const user = process.env.LOGNAME || process.env.USER || process.env.LNAME || process.env.USERNAME;
switch (process.platform) {
case 'win32':
return process.env.USERPROFILE || process.env.HOMEDRIVE + process.env.HOMEPATH || process.env.HOME || null;
case 'darwin':
return process.env.HOME || (user ? '/Users/' + user : null);
case 'linux':
return process.env.HOME || (process.getuid() === 0 ? '/root' : user ? '/home/' + user : null);
default:
return process.env.HOME || null;
}
}
exports.meta = require(__dirname + '/../../package.json');
const _config_file_dir = `${homedir()}/.vvc`;
const _config_file_path = `${_config_file_dir}/config.json`;
let config;
async function innerRead() {
const raw = await util_1.promisify(fs.readFile)(_config_file_path, 'utf8');
return JSON.parse(raw.toString());
}
async function read(force = false) {
if (!config || force) {
config = innerRead();
}
return config;
}
exports.read = read;
async function write(newConfig) {
try {
const stat = await util_1.promisify(fs.stat)(_config_file_dir);
if (!stat.isDirectory()) {
let e = new Error(`${_config_file_dir} is not a directory`);
e.code = 'ENOTDIR';
throw e;
}
}
catch (e) {
if (e.code !== 'ENOENT') {
throw e;
}
await util_1.promisify(fs.mkdir)(_config_file_dir);
}
await util_1.promisify(fs.writeFile)(_config_file_path, JSON.stringify(_.omit(newConfig, ['info']), null, 2));
return (config = Promise.resolve(newConfig));
}
exports.write = write;
function unlink() {
return util_1.promisify(fs.unlink)(_config_file_path);
}
exports.unlink = unlink;
//# sourceMappingURL=config.js.map