UNPKG

@gabimoncha/cursor-rules

Version:

A CLI for bootstrapping Cursor rules to a project

74 lines 2.84 kB
import fs from "node:fs/promises"; import path from "node:path"; import { confirm } from "@clack/prompts"; import pc from 'picocolors'; import { logger } from "../shared/logger.js"; export async function installRules(templateDir, overwrite = false, selectedRules = []) { try { logger.prompt.step("Installing Cursor rules..."); // Create .cursor directory if it doesn't exist const cursorDir = path.join(process.cwd(), ".cursor", "rules"); await fs.mkdir(cursorDir, { recursive: true }); // Get list of rule files from the package let templateFiles = await fs.readdir(templateDir); if (selectedRules.length > 0) { templateFiles = templateFiles.filter(file => selectedRules.includes(file)); } // Copy each rule file to the project's .cursor directory let copied = 0; let overwritten = 0; let result = false; // Get list of existing rule files let existingFiles = await fs.readdir(cursorDir); for (const file of templateFiles) { if (!file.endsWith(".md")) continue; const fileName = file + 'c'; const source = path.join(templateDir, file); const destination = path.join(cursorDir, fileName); const fileExists = existingFiles.includes(fileName); // Copy the rule file if (!fileExists) { logger.prompt.message(`Adding ${fileName}`); await fs.copyFile(source, destination); copied++; continue; } if (overwrite) { await fs.copyFile(source, destination); overwritten++; continue; } const shouldOverwrite = await confirm({ message: `${fileName} already exists, overwrite?`, }); if (shouldOverwrite) { await fs.copyFile(source, destination); overwritten++; } } if (copied > 0 || overwritten > 0) { result = true; } if (result) { logger.prompt.info(`${copied} rules added, ${overwritten} rules overwritten.`); } return result; } catch (error) { // Handle case where we might not be in a project (e.g., global install) logger.error("Failed to install cursor rules:", error); process.exit(1); } } export function logInstallResult(changesMade) { if (changesMade) { logger.prompt.outro(pc.green("You're all set!")); logger.quiet(pc.green("\n You're all set!")); } else { logger.prompt.outro(pc.yellow("No rules were added.")); logger.quiet(pc.yellow("\n No rules were added.")); } } //# sourceMappingURL=installRules.js.map