codetainer
Version:
A clean and simple CLI to manage and store code snippets with ease.
87 lines (80 loc) • 2.23 kB
JavaScript
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}`));
}
}
});
}