-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
executable file
·153 lines (137 loc) · 3.96 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/usr/bin/env node
const { Command } = require("commander");
const { join } = require("path");
const { input, confirm } = require("@inquirer/prompts");
const fs = require("fs");
const ora = require("ora");
const gradient = require("gradient-string");
const figlet = require("figlet");
const Table = require("cli-table");
const packageVersion = require("./package.json");
const todosPath = join("./todos.json");
const program = new Command();
const shell = require("shelljs");
const getJson = (path) => {
const data = fs.existsSync(path) ? fs.readFileSync(path) : [];
try {
return JSON.parse(data);
} catch (e) {
return [];
}
};
const saveJson = (path, data) =>
fs.writeFileSync(path, JSON.stringify(data, null, "\t"));
const showTodoTable = (data) => {
const table = new Table({
head: ["ID", "Descrição", "Status"],
colWidths: [10, 20, 10],
});
data.map((todo, index) =>
table.push([
index,
todo.title,
todo.done ? gradient("green", "green")("feito") : "pendente",
])
);
console.log(table.toString());
};
program.version(packageVersion.version);
console.log(gradient("red", "green", "blue")(figlet.textSync("To-do CLI")));
program
.command("add [todo]")
.description("Adiciona um to-do")
.option("-s, --status [status]", "Status inicial do to-do")
.action(async (todo, options) => {
let answare;
if (!todo) {
answare = await input({
message: "Qual é o seu to-do?",
validate: (value) => (value ? true : "Não é permitido um to-do vazio."),
});
todo = answare;
}
const data = getJson(todosPath);
data.push({
title: todo,
done: options.status === "true" || false,
});
saveJson(todosPath, data);
console.log(gradient("green", "green")("To-do adicionado com sucesso!"));
});
program
.command("list")
.description("Lista os to-dos")
.action(() => {
const data = getJson(todosPath);
showTodoTable(data);
});
program
.command("do <todo>")
.description("Marca o to-do como feito")
.action(async (todo) => {
let answers;
if (!todo) {
answers = await input({
message: "Qual o id do to-do?",
validate: (value) =>
value !== undefined ? true : "Defina um to-do para ser atualizado!",
});
}
const data = getJson(todosPath);
data[todo].done = true;
saveJson(todosPath, data);
console.log(gradient("green", "green")("To-do salvo com sucesso!"));
showTodoTable(data);
});
program
.command("undo <todo>")
.description("Marca o to-do como não feito")
.action(async (todo) => {
let answers;
if (!todo) {
answers = await input({
message: "Qual o id do to-do?",
validate: (value) =>
value ? true : "Defina um to-do para ser atualizado!",
});
}
const data = getJson(todosPath);
data[todo].done = false;
saveJson(todosPath, data);
console.log(gradient("green", "green")("To-do salvo com sucesso!"));
showTodoTable(data);
});
program
.command("backup")
.description("Faz um backup dos to-dos")
.action(async () => {
let answers;
answers = await confirm({
message:
"Você realmente gostaria de realizar o backup do arquivo todos.json?",
default: true,
});
if (answers) {
const spinner = ora("Iniciando backup... \n").start();
setTimeout(() => {
shell.mkdir("-p", "backup");
const command = shell.exec("mv ./todos.json ./backup/todos.json", {
silent: true,
});
if (!command.code) {
spinner.succeed(
gradient(
"green",
"green"
)("Backup realizado com sucesso! To-dos zerados.")
);
} else {
console.log(command.stderr);
spinner.fail(gradient("red", "red")("Erro ao realizar backup."));
}
}, 3000);
} else {
console.log(gradient("#ffc107", "#ffc107")("Operação cancelada!"));
}
});
program.parse(process.argv);