├── .gitignore ├── aula.md ├── index.js ├── metas.json ├── package-lock.json ├── package.json └── todo.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /aula.md: -------------------------------------------------------------------------------- 1 | ## Linguagem de programação 2 | 3 | Maneira de dar instrução ao computador. 4 | Como um lego, você irá utilizar peças para criar algoritmos, ou seja, para resolver problemas. 5 | 6 | > 💡 **Algoritmo**: Sequência de passos lógica e finita para resolução de um problema. 7 | 8 | ## Peças de uma linguagem 9 | 10 | - Comentários 11 | - Declaração de variáveis (const, let) 12 | - Operadores (atribuição, concatenação, matemáticos, lógicos ) 13 | - Tipos de dados (string, number, boolean) 14 | - Estrutura de dados (functions, object, array) 15 | - Controle de fluxo (if/else) 16 | - Estrutura de repetição (for, while) 17 | 18 | # Fases da resolução de um problema 19 | 20 | Coletar os dados 21 | Processar os dados (manipular, alterar ...) 22 | Apresentar os dados 23 | 24 | ## Escopo e variáveis: 25 | 26 | - [x] Variáveis globais e locais 27 | - [x] Constantes 28 | 29 | ## Tipos de dados: 30 | 31 | - [x] Strings (texto): "" '' `` 32 | - [x] Numbers: 2 1.4 33 | - [x] Boolean: true, false 34 | 35 | # Operadores 36 | 37 | - [x] Operadores de atribuição de valor: = 38 | - [x] Operador de contatenação: + 39 | - [x] Operadores de comparação: == != <= >= < > 40 | - [x] Spread operator: ... 41 | 42 | ## Estruturas de dados: 43 | 44 | ### Arrays: 45 | 46 | - [x] Uma lista que contém qualquer tipo de dado 47 | - [x] Métodos de array: push, [find, forEach, filter, map] : HOF (Higher Order Functions) 48 | 49 | ### Objetos: 50 | 51 | - [x] Atributos e métodos 52 | - [x] Criação e manipulação de objetos 53 | - [x] Acesso a propriedades de objetos 54 | 55 | ### Functions 56 | 57 | - [x] criar, passar argumento 58 | - [x] excutar 59 | - [x] arrow function / named function 60 | 61 | # Estrutura de repetição 62 | 63 | - [x] while 64 | 65 | # Condicionais 66 | 67 | - [x] switch 68 | - [x] if/else 69 | 70 | ## Módulos em Node.js: 71 | 72 | - [x] Importação de módulos (require, CommonJS) 73 | - [x] Biblioteca 'inquirer' para criar prompts interativos 74 | - [x] FS (file system) 75 | 76 | ## JSON 77 | 78 | - [x] Javascript Object Notation (.json) 79 | - [x] JSON.parse(): transforma de JSON para JS 80 | - [x] JSON.stringify(): transforma de JS para JSON 81 | 82 | ## Programação assíncrona e Promises: 83 | 84 | - [x] Uso de funções assíncronas (async/await) -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { select, input, checkbox } = require('@inquirer/prompts') 2 | const fs = require("fs").promises 3 | 4 | let mensagem = "Bem vindo ao App de Metas"; 5 | 6 | let metas 7 | 8 | const carregarMetas = async () => { 9 | try { 10 | const dados = await fs.readFile("metas.json", "utf-8") 11 | metas = JSON.parse(dados) 12 | } 13 | catch (erro) { 14 | metas = [] 15 | } 16 | } 17 | 18 | const salvarMetas = async () => { 19 | await fs.writeFile("metas.json", JSON.stringify(metas, null, 2)) 20 | } 21 | 22 | const cadastrarMeta = async () => { 23 | const meta = await input({ message: "Digite a meta:" }) 24 | 25 | if (meta.length == 0) { 26 | mensagem = 'A meta não pode ser vazia.' 27 | return 28 | } 29 | 30 | metas.push( 31 | { value: meta, checked: false } 32 | ) 33 | mensagem = "Meta cadastrada com sucesso!" 34 | } 35 | 36 | const listarMetas = async () => { 37 | if (metas.length == 0) { 38 | mensagem = "Não existem metas!" 39 | return 40 | } 41 | 42 | const respostas = await checkbox({ 43 | message: "Use as setas para mudar de meta, o espaço para marcar ou desmarcar e o Enter para finalizar essa etapa", 44 | choices: [...metas], 45 | instructions: false, 46 | }) 47 | 48 | metas.forEach((m) => { 49 | m.checked = false 50 | }) 51 | 52 | if (respostas.length == 0) { 53 | mensagem = "Nenhuma meta selecionada!" 54 | return 55 | } 56 | 57 | respostas.forEach((resposta) => { 58 | const meta = metas.find((m) => { 59 | return m.value == resposta 60 | }) 61 | 62 | meta.checked = true 63 | }) 64 | 65 | mensagem = 'Meta(s) marcada(s) como concluída(s)' 66 | 67 | } 68 | 69 | const metasRealizadas = async () => { 70 | if (metas.length == 0) { 71 | mensagem = "Não existem metas!" 72 | return 73 | } 74 | 75 | const realizadas = metas.filter((meta) => { 76 | return meta.checked 77 | }) 78 | 79 | if (realizadas.length == 0) { 80 | mensagem = 'Não existem metas realizadas! :(' 81 | return 82 | } 83 | 84 | await select({ 85 | message: "Metas Realizadas: " + realizadas.length, 86 | choices: [...realizadas] 87 | }) 88 | } 89 | 90 | const metasAbertas = async () => { 91 | if (metas.length == 0) { 92 | mensagem = "Não existem metas!" 93 | return 94 | } 95 | 96 | const abertas = metas.filter((meta) => { 97 | return meta.checked != true 98 | }) 99 | 100 | if (abertas.length == 0) { 101 | mensagem = 'Não existem metas abertas! :)' 102 | return 103 | } 104 | 105 | await select({ 106 | message: "Metas Abertas: " + abertas.length, 107 | choices: [...abertas] 108 | }) 109 | } 110 | 111 | const deletarMetas = async () => { 112 | if(metas.length == 0) { 113 | mensagem = "Não existem metas!" 114 | return 115 | } 116 | 117 | const metasDesmarcadas = metas.map((meta) => { 118 | return { value: meta.value, checked: false } 119 | }) 120 | 121 | const itemsADeletar = await checkbox({ 122 | message: "Selecione item para deletar", 123 | choices: [...metasDesmarcadas], 124 | instructions: false, 125 | }) 126 | 127 | if (itemsADeletar.length == 0) { 128 | mensagem = "Nenhum item para deletar!" 129 | return 130 | } 131 | 132 | itemsADeletar.forEach((item) => { 133 | metas = metas.filter((meta) => { 134 | return meta.value != item 135 | }) 136 | }) 137 | 138 | mensagem = "Meta(s) deleta(s) com sucesso!" 139 | } 140 | 141 | const mostrarMensagem = () => { 142 | console.clear(); 143 | 144 | if (mensagem != "") { 145 | console.log(mensagem) 146 | console.log("") 147 | mensagem = "" 148 | } 149 | } 150 | 151 | const start = async () => { 152 | await carregarMetas() 153 | 154 | while (true) { 155 | mostrarMensagem() 156 | await salvarMetas() 157 | 158 | const opcao = await select({ 159 | message: "Menu >", 160 | choices: [ 161 | { 162 | name: "Cadastrar meta", 163 | value: "cadastrar" 164 | }, 165 | { 166 | name: "Listar metas", 167 | value: "listar" 168 | }, 169 | { 170 | name: "Metas realizadas", 171 | value: "realizadas" 172 | }, 173 | { 174 | name: "Metas abertas", 175 | value: "abertas" 176 | }, 177 | { 178 | name: "Deletar metas", 179 | value: "deletar" 180 | }, 181 | { 182 | name: "Sair", 183 | value: "sair" 184 | } 185 | ] 186 | }) 187 | 188 | switch (opcao) { 189 | case "cadastrar": 190 | await cadastrarMeta() 191 | break 192 | case "listar": 193 | await listarMetas() 194 | break 195 | case "realizadas": 196 | await metasRealizadas() 197 | break 198 | case "abertas": 199 | await metasAbertas() 200 | break 201 | case "deletar": 202 | await deletarMetas() 203 | break 204 | case "sair": 205 | console.log('Até a próxima!') 206 | return 207 | } 208 | } 209 | } 210 | 211 | start(); -------------------------------------------------------------------------------- /metas.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "value": "Tomar 3L de água por dia", 4 | "checked": false 5 | }, 6 | { 7 | "value": "Andar 20 minutos todos os dias", 8 | "checked": false 9 | }, 10 | { 11 | "value": "Meditar 5 minutos todos os dias", 12 | "checked": true 13 | }, 14 | { 15 | "value": "Ler por 15 minutos", 16 | "checked": false 17 | } 18 | ] -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nlw-pocket", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "inquirer": "^10.1.8" 9 | } 10 | }, 11 | "node_modules/@inquirer/checkbox": { 12 | "version": "2.4.7", 13 | "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.4.7.tgz", 14 | "integrity": "sha512-5YwCySyV1UEgqzz34gNsC38eKxRBtlRDpJLlKcRtTjlYA/yDKuc1rfw+hjw+2WJxbAZtaDPsRl5Zk7J14SBoBw==", 15 | "dependencies": { 16 | "@inquirer/core": "^9.0.10", 17 | "@inquirer/figures": "^1.0.5", 18 | "@inquirer/type": "^1.5.2", 19 | "ansi-escapes": "^4.3.2", 20 | "yoctocolors-cjs": "^2.1.2" 21 | }, 22 | "engines": { 23 | "node": ">=18" 24 | } 25 | }, 26 | "node_modules/@inquirer/confirm": { 27 | "version": "3.1.22", 28 | "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz", 29 | "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", 30 | "dependencies": { 31 | "@inquirer/core": "^9.0.10", 32 | "@inquirer/type": "^1.5.2" 33 | }, 34 | "engines": { 35 | "node": ">=18" 36 | } 37 | }, 38 | "node_modules/@inquirer/core": { 39 | "version": "9.0.10", 40 | "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.10.tgz", 41 | "integrity": "sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA==", 42 | "dependencies": { 43 | "@inquirer/figures": "^1.0.5", 44 | "@inquirer/type": "^1.5.2", 45 | "@types/mute-stream": "^0.0.4", 46 | "@types/node": "^22.1.0", 47 | "@types/wrap-ansi": "^3.0.0", 48 | "ansi-escapes": "^4.3.2", 49 | "cli-spinners": "^2.9.2", 50 | "cli-width": "^4.1.0", 51 | "mute-stream": "^1.0.0", 52 | "signal-exit": "^4.1.0", 53 | "strip-ansi": "^6.0.1", 54 | "wrap-ansi": "^6.2.0", 55 | "yoctocolors-cjs": "^2.1.2" 56 | }, 57 | "engines": { 58 | "node": ">=18" 59 | } 60 | }, 61 | "node_modules/@inquirer/editor": { 62 | "version": "2.1.22", 63 | "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.1.22.tgz", 64 | "integrity": "sha512-K1QwTu7GCK+nKOVRBp5HY9jt3DXOfPGPr6WRDrPImkcJRelG9UTx2cAtK1liXmibRrzJlTWOwqgWT3k2XnS62w==", 65 | "dependencies": { 66 | "@inquirer/core": "^9.0.10", 67 | "@inquirer/type": "^1.5.2", 68 | "external-editor": "^3.1.0" 69 | }, 70 | "engines": { 71 | "node": ">=18" 72 | } 73 | }, 74 | "node_modules/@inquirer/expand": { 75 | "version": "2.1.22", 76 | "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.1.22.tgz", 77 | "integrity": "sha512-wTZOBkzH+ItPuZ3ZPa9lynBsdMp6kQ9zbjVPYEtSBG7UulGjg2kQiAnUjgyG4SlntpTce5bOmXAPvE4sguXjpA==", 78 | "dependencies": { 79 | "@inquirer/core": "^9.0.10", 80 | "@inquirer/type": "^1.5.2", 81 | "yoctocolors-cjs": "^2.1.2" 82 | }, 83 | "engines": { 84 | "node": ">=18" 85 | } 86 | }, 87 | "node_modules/@inquirer/figures": { 88 | "version": "1.0.5", 89 | "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", 90 | "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", 91 | "engines": { 92 | "node": ">=18" 93 | } 94 | }, 95 | "node_modules/@inquirer/input": { 96 | "version": "2.2.9", 97 | "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.2.9.tgz", 98 | "integrity": "sha512-7Z6N+uzkWM7+xsE+3rJdhdG/+mQgejOVqspoW+w0AbSZnL6nq5tGMEVASaYVWbkoSzecABWwmludO2evU3d31g==", 99 | "dependencies": { 100 | "@inquirer/core": "^9.0.10", 101 | "@inquirer/type": "^1.5.2" 102 | }, 103 | "engines": { 104 | "node": ">=18" 105 | } 106 | }, 107 | "node_modules/@inquirer/number": { 108 | "version": "1.0.10", 109 | "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.0.10.tgz", 110 | "integrity": "sha512-kWTxRF8zHjQOn2TJs+XttLioBih6bdc5CcosXIzZsrTY383PXI35DuhIllZKu7CdXFi2rz2BWPN9l0dPsvrQOA==", 111 | "dependencies": { 112 | "@inquirer/core": "^9.0.10", 113 | "@inquirer/type": "^1.5.2" 114 | }, 115 | "engines": { 116 | "node": ">=18" 117 | } 118 | }, 119 | "node_modules/@inquirer/password": { 120 | "version": "2.1.22", 121 | "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.1.22.tgz", 122 | "integrity": "sha512-5Fxt1L9vh3rAKqjYwqsjU4DZsEvY/2Gll+QkqR4yEpy6wvzLxdSgFhUcxfDAOtO4BEoTreWoznC0phagwLU5Kw==", 123 | "dependencies": { 124 | "@inquirer/core": "^9.0.10", 125 | "@inquirer/type": "^1.5.2", 126 | "ansi-escapes": "^4.3.2" 127 | }, 128 | "engines": { 129 | "node": ">=18" 130 | } 131 | }, 132 | "node_modules/@inquirer/prompts": { 133 | "version": "5.3.8", 134 | "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.3.8.tgz", 135 | "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==", 136 | "dependencies": { 137 | "@inquirer/checkbox": "^2.4.7", 138 | "@inquirer/confirm": "^3.1.22", 139 | "@inquirer/editor": "^2.1.22", 140 | "@inquirer/expand": "^2.1.22", 141 | "@inquirer/input": "^2.2.9", 142 | "@inquirer/number": "^1.0.10", 143 | "@inquirer/password": "^2.1.22", 144 | "@inquirer/rawlist": "^2.2.4", 145 | "@inquirer/search": "^1.0.7", 146 | "@inquirer/select": "^2.4.7" 147 | }, 148 | "engines": { 149 | "node": ">=18" 150 | } 151 | }, 152 | "node_modules/@inquirer/rawlist": { 153 | "version": "2.2.4", 154 | "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.2.4.tgz", 155 | "integrity": "sha512-pb6w9pWrm7EfnYDgQObOurh2d2YH07+eDo3xQBsNAM2GRhliz6wFXGi1thKQ4bN6B0xDd6C3tBsjdr3obsCl3Q==", 156 | "dependencies": { 157 | "@inquirer/core": "^9.0.10", 158 | "@inquirer/type": "^1.5.2", 159 | "yoctocolors-cjs": "^2.1.2" 160 | }, 161 | "engines": { 162 | "node": ">=18" 163 | } 164 | }, 165 | "node_modules/@inquirer/search": { 166 | "version": "1.0.7", 167 | "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.0.7.tgz", 168 | "integrity": "sha512-p1wpV+3gd1eST/o5N3yQpYEdFNCzSP0Klrl+5bfD3cTTz8BGG6nf4Z07aBW0xjlKIj1Rp0y3x/X4cZYi6TfcLw==", 169 | "dependencies": { 170 | "@inquirer/core": "^9.0.10", 171 | "@inquirer/figures": "^1.0.5", 172 | "@inquirer/type": "^1.5.2", 173 | "yoctocolors-cjs": "^2.1.2" 174 | }, 175 | "engines": { 176 | "node": ">=18" 177 | } 178 | }, 179 | "node_modules/@inquirer/select": { 180 | "version": "2.4.7", 181 | "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.4.7.tgz", 182 | "integrity": "sha512-JH7XqPEkBpNWp3gPCqWqY8ECbyMoFcCZANlL6pV9hf59qK6dGmkOlx1ydyhY+KZ0c5X74+W6Mtp+nm2QX0/MAQ==", 183 | "dependencies": { 184 | "@inquirer/core": "^9.0.10", 185 | "@inquirer/figures": "^1.0.5", 186 | "@inquirer/type": "^1.5.2", 187 | "ansi-escapes": "^4.3.2", 188 | "yoctocolors-cjs": "^2.1.2" 189 | }, 190 | "engines": { 191 | "node": ">=18" 192 | } 193 | }, 194 | "node_modules/@inquirer/type": { 195 | "version": "1.5.2", 196 | "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz", 197 | "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==", 198 | "dependencies": { 199 | "mute-stream": "^1.0.0" 200 | }, 201 | "engines": { 202 | "node": ">=18" 203 | } 204 | }, 205 | "node_modules/@types/mute-stream": { 206 | "version": "0.0.4", 207 | "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", 208 | "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", 209 | "dependencies": { 210 | "@types/node": "*" 211 | } 212 | }, 213 | "node_modules/@types/node": { 214 | "version": "22.5.0", 215 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz", 216 | "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==", 217 | "dependencies": { 218 | "undici-types": "~6.19.2" 219 | } 220 | }, 221 | "node_modules/@types/wrap-ansi": { 222 | "version": "3.0.0", 223 | "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", 224 | "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==" 225 | }, 226 | "node_modules/ansi-escapes": { 227 | "version": "4.3.2", 228 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 229 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 230 | "dependencies": { 231 | "type-fest": "^0.21.3" 232 | }, 233 | "engines": { 234 | "node": ">=8" 235 | }, 236 | "funding": { 237 | "url": "https://github.com/sponsors/sindresorhus" 238 | } 239 | }, 240 | "node_modules/ansi-regex": { 241 | "version": "5.0.1", 242 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 243 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 244 | "engines": { 245 | "node": ">=8" 246 | } 247 | }, 248 | "node_modules/ansi-styles": { 249 | "version": "4.3.0", 250 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 251 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 252 | "dependencies": { 253 | "color-convert": "^2.0.1" 254 | }, 255 | "engines": { 256 | "node": ">=8" 257 | }, 258 | "funding": { 259 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 260 | } 261 | }, 262 | "node_modules/chardet": { 263 | "version": "0.7.0", 264 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 265 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" 266 | }, 267 | "node_modules/cli-spinners": { 268 | "version": "2.9.2", 269 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", 270 | "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", 271 | "engines": { 272 | "node": ">=6" 273 | }, 274 | "funding": { 275 | "url": "https://github.com/sponsors/sindresorhus" 276 | } 277 | }, 278 | "node_modules/cli-width": { 279 | "version": "4.1.0", 280 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", 281 | "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", 282 | "engines": { 283 | "node": ">= 12" 284 | } 285 | }, 286 | "node_modules/color-convert": { 287 | "version": "2.0.1", 288 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 289 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 290 | "dependencies": { 291 | "color-name": "~1.1.4" 292 | }, 293 | "engines": { 294 | "node": ">=7.0.0" 295 | } 296 | }, 297 | "node_modules/color-name": { 298 | "version": "1.1.4", 299 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 300 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 301 | }, 302 | "node_modules/emoji-regex": { 303 | "version": "8.0.0", 304 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 305 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 306 | }, 307 | "node_modules/external-editor": { 308 | "version": "3.1.0", 309 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 310 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 311 | "dependencies": { 312 | "chardet": "^0.7.0", 313 | "iconv-lite": "^0.4.24", 314 | "tmp": "^0.0.33" 315 | }, 316 | "engines": { 317 | "node": ">=4" 318 | } 319 | }, 320 | "node_modules/iconv-lite": { 321 | "version": "0.4.24", 322 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 323 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 324 | "dependencies": { 325 | "safer-buffer": ">= 2.1.2 < 3" 326 | }, 327 | "engines": { 328 | "node": ">=0.10.0" 329 | } 330 | }, 331 | "node_modules/inquirer": { 332 | "version": "10.1.8", 333 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-10.1.8.tgz", 334 | "integrity": "sha512-syxGpOzLyqVeZi1KDBjRTnCn5PiGWySGHP0BbqXbqsEK0ckkZk3egAepEWslUjZXj0rhkUapVXM/IpADWe4D6w==", 335 | "dependencies": { 336 | "@inquirer/prompts": "^5.3.8", 337 | "@inquirer/type": "^1.5.2", 338 | "@types/mute-stream": "^0.0.4", 339 | "ansi-escapes": "^4.3.2", 340 | "mute-stream": "^1.0.0", 341 | "run-async": "^3.0.0", 342 | "rxjs": "^7.8.1" 343 | }, 344 | "engines": { 345 | "node": ">=18" 346 | } 347 | }, 348 | "node_modules/is-fullwidth-code-point": { 349 | "version": "3.0.0", 350 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 351 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 352 | "engines": { 353 | "node": ">=8" 354 | } 355 | }, 356 | "node_modules/mute-stream": { 357 | "version": "1.0.0", 358 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", 359 | "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", 360 | "engines": { 361 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 362 | } 363 | }, 364 | "node_modules/os-tmpdir": { 365 | "version": "1.0.2", 366 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 367 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", 368 | "engines": { 369 | "node": ">=0.10.0" 370 | } 371 | }, 372 | "node_modules/run-async": { 373 | "version": "3.0.0", 374 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", 375 | "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", 376 | "engines": { 377 | "node": ">=0.12.0" 378 | } 379 | }, 380 | "node_modules/rxjs": { 381 | "version": "7.8.1", 382 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", 383 | "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", 384 | "dependencies": { 385 | "tslib": "^2.1.0" 386 | } 387 | }, 388 | "node_modules/safer-buffer": { 389 | "version": "2.1.2", 390 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 391 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 392 | }, 393 | "node_modules/signal-exit": { 394 | "version": "4.1.0", 395 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 396 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 397 | "engines": { 398 | "node": ">=14" 399 | }, 400 | "funding": { 401 | "url": "https://github.com/sponsors/isaacs" 402 | } 403 | }, 404 | "node_modules/string-width": { 405 | "version": "4.2.3", 406 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 407 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 408 | "dependencies": { 409 | "emoji-regex": "^8.0.0", 410 | "is-fullwidth-code-point": "^3.0.0", 411 | "strip-ansi": "^6.0.1" 412 | }, 413 | "engines": { 414 | "node": ">=8" 415 | } 416 | }, 417 | "node_modules/strip-ansi": { 418 | "version": "6.0.1", 419 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 420 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 421 | "dependencies": { 422 | "ansi-regex": "^5.0.1" 423 | }, 424 | "engines": { 425 | "node": ">=8" 426 | } 427 | }, 428 | "node_modules/tmp": { 429 | "version": "0.0.33", 430 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 431 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 432 | "dependencies": { 433 | "os-tmpdir": "~1.0.2" 434 | }, 435 | "engines": { 436 | "node": ">=0.6.0" 437 | } 438 | }, 439 | "node_modules/tslib": { 440 | "version": "2.7.0", 441 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", 442 | "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" 443 | }, 444 | "node_modules/type-fest": { 445 | "version": "0.21.3", 446 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 447 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 448 | "engines": { 449 | "node": ">=10" 450 | }, 451 | "funding": { 452 | "url": "https://github.com/sponsors/sindresorhus" 453 | } 454 | }, 455 | "node_modules/undici-types": { 456 | "version": "6.19.8", 457 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 458 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" 459 | }, 460 | "node_modules/wrap-ansi": { 461 | "version": "6.2.0", 462 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 463 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 464 | "dependencies": { 465 | "ansi-styles": "^4.0.0", 466 | "string-width": "^4.1.0", 467 | "strip-ansi": "^6.0.0" 468 | }, 469 | "engines": { 470 | "node": ">=8" 471 | } 472 | }, 473 | "node_modules/yoctocolors-cjs": { 474 | "version": "2.1.2", 475 | "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", 476 | "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", 477 | "engines": { 478 | "node": ">=18" 479 | }, 480 | "funding": { 481 | "url": "https://github.com/sponsors/sindresorhus" 482 | } 483 | } 484 | } 485 | } 486 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "inquirer": "^10.1.8" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /todo.md: -------------------------------------------------------------------------------- 1 | [x] Criar metas 2 | [x] Listar metas 3 | [x] Metas realizadas 4 | [x] Metas abertas 5 | [x] Marcar/Desmarcar metas realizadas 6 | [x] Remover metas 7 | [x] Sistema de mensages 8 | [x] Persistir dados 9 | --------------------------------------------------------------------------------