UNPKG

@latentsearch/timemachine-cli

Version:

CLI tool for TimeMachine API. Generates time entries, lists users/projects, and features an enhanced dry-run output for generation.

91 lines (90 loc) 3.88 kB
#!/usr/bin/env node "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const commander_1 = require("commander"); const dotenv_1 = __importDefault(require("dotenv")); const luxon_1 = require("luxon"); // Load environment variables dotenv_1.default.config(); // Import command implementations const list_users_1 = require("./commands/list-users"); const list_projects_1 = require("./commands/list-projects"); const create_entry_1 = require("./commands/create-entry"); const generate_entries_1 = require("./commands/generate-entries"); const list_entries_1 = require("./commands/list-entries"); const program = new commander_1.Command(); // Main program definition program .name("codeclock") .description("Code Clock Time Entry Management CLI") .version("1.0.0") .option("-b, --base-url <url>", "API base URL", process.env.CODECLOCK_API_URL || "https://codeclock.yourdomain.workers.dev") .option("-k, --api-key <key>", "API key", process.env.CODECLOCK_API_KEY) .option("-v, --verbose", "Show detailed output", false); // List users command program .command("list-users") .description("List all users") .action(async (options) => { const opts = { ...program.opts(), ...options }; await (0, list_users_1.listUsers)(opts); }); // List projects command program .command("list-projects") .description("List all projects") .action(async (options) => { const opts = { ...program.opts(), ...options }; await (0, list_projects_1.listProjects)(opts); }); // Create a single time entry interactively program .command("create") .description("Create a time entry interactively") .action(async (options) => { const opts = { ...program.opts(), ...options }; await (0, create_entry_1.createEntry)(opts); }); // Get default dates for the last 30 days const today = new Date(); const thirtyDaysAgo = new Date(today); thirtyDaysAgo.setDate(today.getDate() - 30); // Use empty string as fallback if toISODate returns null const defaultStartDate = luxon_1.DateTime.fromJSDate(thirtyDaysAgo).toISODate() || ''; const defaultEndDate = luxon_1.DateTime.fromJSDate(today).toISODate() || ''; // Generate multiple time entries based on pattern program .command("generate") .description("Generate time entries based on weekday patterns") .option("-u, --user <id|name>", "User ID or name") .option("-p, --project <id|name>", "Project ID or name") .option("-s, --start-date <date>", "Start date (YYYY-MM-DD)", defaultStartDate) .option("-e, --end-date <date>", "End date (YYYY-MM-DD)", defaultEndDate) .option("-d, --days <days>", "Days to log time (comma-separated: 1=Monday through 7=Sunday)", "1,2,3,4,5") .option("-h, --hours <hours>", "Hours per day", "8") .option("--dry-run", "Perform a dry run without making actual API calls", false) .action(async (options) => { const opts = { ...program.opts(), ...options }; await (0, generate_entries_1.generateEntries)(opts); }); // Display time entries command program .command("list-entries") .description("List time entries") .option("-u, --user <id|name>", "Filter by user ID or name") .option("-p, --project <id|name>", "Filter by project ID or name") .option("-s, --start-date <date>", "Start date (YYYY-MM-DD)", defaultStartDate) .option("-e, --end-date <date>", "End date (YYYY-MM-DD)", defaultEndDate) .option("-l, --limit <number>", "Limit number of entries", "50") .action(async (options) => { const opts = { ...program.opts(), ...options }; await (0, list_entries_1.listEntries)(opts); }); program.parse(process.argv); // If no command provided, show help if (!process.argv.slice(2).length) { program.outputHelp(); }