UNPKG

duty-js

Version:

Duty is a todo list manager with notification support

119 lines (82 loc) 2.61 kB
const fs = require("fs"); const path = require("path"); // const mkdirp = require('mkdirp'); const { homedir } = require("os"); const confLocation = path.join(homedir(), ".duty.config.json"); if ( ! fs.existsSync(confLocation) ) fs.writeFileSync(confLocation,"{}"); function isCFGLocation(location) { return fs.existsSync(location); } try { const config = require(confLocation); Object.assign(config, { todoGroup: require(config.location) }); module.exports = new(require("./src/duty.js"))(config); } catch (ex) { // if ( process.env.NODE_ENV === "development" ) { // console.log(ex); // } ; (() => { const rl = require("readline"); const DEFAULT = `${path.join(homedir(), ".duty.json")}`; const _interface = rl.createInterface({ input: process.stdin, output: process.stdout }); function askQuestion(question) { return new Promise((resolve) => { _interface.question(question, answer => resolve(answer)); }); } async function _f() { try { let answer = await askQuestion( `default todo location not found, use \"${DEFAULT}\" as default (y/n) ` ), config; switch (answer) { case "y": _interface.close(); config = { location: DEFAULT }; if ( ! isCFGLocation(config.location) ) fs.writeFileSync(config.location, "{}"); fs.writeFileSync(confLocation, JSON.stringify(config)); module.exports = new(require("./src/duty.js"))(config); break; case "n": answer = await askQuestion( "specify a directory to save the todos " ); _interface.close(); if (answer.length === 0) { console.error("invalid input specified\n"); break; } // mkdirp.sync(answer.substr(0, answer.lastIndexOf(path.sep))); if ( ! fs.existsSync(answer) ) { console.error(`${answer} does not exists`); return ; } else { config = { location: `${path.join(answer, ".duty.json")}` }; } if ( ! isCFGLocation(config.location) ) fs.writeFileSync(config.location, "{}"); fs.writeFileSync(confLocation, JSON.stringify(config)); module.exports = new(require("./src/duty.js"))(config); break; default: _f(); } } catch (ex) { console.log(ex); } }; _f(); })(); }