UNPKG

codetainer

Version:

A clean and simple CLI to manage and store code snippets with ease.

87 lines (80 loc) 2.23 kB
import inquirer from "inquirer"; import chalk from "chalk"; import { loadSnippets, saveSnippets } from "../utils/file.js"; const commonLanguages = [ "javascript", "typescript", "python", "html", "css", "bash", "sql", "json", "other", ]; const commonTags = [ "util", "api", "db", "frontend", "backend", "auth", "custom", ]; export function registerAddCommand(program) { program .command("add") .description("Add a new code snippet") .action(async () => { try { const answers = await inquirer.prompt([ { name: "name", message: "Snippet name:" }, { name: "language", type: "list", message: "Choose language:", choices: commonLanguages, }, { name: "tags", type: "checkbox", message: "Select tags (use spacebar to select):", choices: commonTags, }, { name: "code", message: "Enter your code:", type: "editor" }, ]); if (!answers.name || !answers.code) { console.log( chalk.yellow("⚠️ Snippet creation cancelled or incomplete.") ); return; } const snippets = loadSnippets(); if (snippets[answers.name]) { console.log( chalk.red(`❌ Snippet "${answers.name}" already exists.`) ); return; } snippets[answers.name] = { code: answers.code, tags: answers.tags, language: answers.language, }; saveSnippets(snippets); console.log(chalk.green("✅ Snippet saved!")); } catch (err) { if (err.isTtyError) { console.log(chalk.red("❌ Terminal doesn't support prompts.")); } else if ( err.message === "canceled" || err.message.includes("SIGINT") ) { console.log(chalk.yellow("\n👋 Snippet creation cancelled by user.")); process.exit(0); } else { console.error(chalk.red(`❌ Unexpected error: ${err.message}`)); } } }); }