#!/usr/bin/env node import { load, save, add, has, complete, remove, format } from "./todo.js"; const FILE = process.env.TODO_FILE ?? "todos.json"; const USAGE = "Usage: todo [ls | add | done | rm ]"; const [cmd = "ls", ...args] = process.argv.slice(2); function fail(message) { console.error(message); process.exit(1); } function parseId(todos, arg) { if (!/^\d+$/.test(arg ?? "")) fail(`Invalid id: ${arg ?? "(missing)"}\n${USAGE}`); const id = Number(arg); if (!has(todos, id)) fail(`No todo with id ${id}`); return id; } if (!["ls", "add", "done", "rm"].includes(cmd)) fail(`Unknown command: ${cmd}\n${USAGE}`); let todos; try { todos = load(FILE); } catch (err) { fail(err.message); } switch (cmd) { case "add": { const text = args.join(" ").trim(); if (!text) fail(`Missing todo text\n${USAGE}`); todos = add(todos, text); break; } case "done": todos = complete(todos, parseId(todos, args[0])); break; case "rm": todos = remove(todos, parseId(todos, args[0])); break; } if (cmd !== "ls") { try { save(FILE, todos); } catch (err) { fail(err.message); } } console.log(format(todos));