cursor-kit-cli 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../src/utils/branding.ts","../src/commands/init.ts","../src/utils/fs.ts","../src/utils/constants.ts","../src/commands/add.ts","../src/commands/pull.ts","../src/commands/list.ts","../src/commands/remove.ts"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport { printBanner, printVersion } from \"./utils/branding\";\nimport { initCommand } from \"./commands/init\";\nimport { addCommand } from \"./commands/add\";\nimport { pullCommand } from \"./commands/pull\";\nimport { listCommand } from \"./commands/list\";\nimport { removeCommand } from \"./commands/remove\";\n\nconst main = defineCommand({\n meta: {\n name: \"cursor-kit\",\n version: \"0.1.0\",\n description: \"CLI toolkit to manage Cursor IDE rules and commands\",\n },\n setup() {\n printBanner();\n printVersion(\"0.1.0\");\n },\n subCommands: {\n init: initCommand,\n add: addCommand,\n pull: pullCommand,\n list: listCommand,\n remove: removeCommand,\n },\n});\n\nrunMain(main);\n\n","import figlet from \"figlet\";\nimport gradient from \"gradient-string\";\nimport pc from \"picocolors\";\n\nconst cursorGradient = gradient([\"#00DC82\", \"#36E4DA\", \"#0047E1\"]);\n\nexport function printBanner(): void {\n const banner = figlet.textSync(\"Cursor Kit\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"fitted\",\n });\n\n console.log(cursorGradient.multiline(banner));\n console.log();\n console.log(\n pc.dim(\" \") +\n pc.bold(pc.cyan(\"✦\")) +\n pc.dim(\" Supercharge your Cursor IDE with rules & commands\")\n );\n console.log();\n}\n\nexport function printSuccess(message: string): void {\n console.log(pc.green(\"✓\") + pc.dim(\" \") + message);\n}\n\nexport function printError(message: string): void {\n console.log(pc.red(\"✗\") + pc.dim(\" \") + message);\n}\n\nexport function printInfo(message: string): void {\n console.log(pc.cyan(\"ℹ\") + pc.dim(\" \") + message);\n}\n\nexport function printWarning(message: string): void {\n console.log(pc.yellow(\"⚠\") + pc.dim(\" \") + message);\n}\n\nexport function printDivider(): void {\n console.log(pc.dim(\"─\".repeat(50)));\n}\n\nexport function printVersion(version: string): void {\n console.log(\n pc.dim(\" v\") + cursorGradient(version) + pc.dim(\" • Made with ♥\")\n );\n console.log();\n}\n\nexport function highlight(text: string): string {\n return pc.cyan(text);\n}\n\nexport function dim(text: string): string {\n return pc.dim(text);\n}\n\nexport function bold(text: string): string {\n return pc.bold(text);\n}\n\nexport function gradientText(text: string): string {\n return cursorGradient(text);\n}\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { downloadTemplate } from \"giget\";\nimport {\n ensureDir,\n getCursorDir,\n getCommandsDir,\n getRulesDir,\n dirExists,\n listFiles,\n} from \"../utils/fs\";\nimport { REPO_URL, REPO_REF } from \"../utils/constants\";\nimport { highlight, printDivider, printSuccess } from \"../utils/branding\";\n\nexport const initCommand = defineCommand({\n meta: {\n name: \"init\",\n description:\n \"Initialize .cursor/commands and .cursor/rules in your project\",\n },\n args: {\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Overwrite existing files\",\n default: false,\n },\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only initialize commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only initialize rules\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const cursorDir = getCursorDir(cwd);\n const commandsDir = getCommandsDir(cwd);\n const rulesDir = getRulesDir(cwd);\n\n const initBoth = !args.commands && !args.rules;\n const shouldInitCommands = initBoth || args.commands;\n const shouldInitRules = initBoth || args.rules;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit init \")));\n\n const commandsExist =\n dirExists(commandsDir) && listFiles(commandsDir).length > 0;\n const rulesExist = dirExists(rulesDir) && listFiles(rulesDir).length > 0;\n\n if ((commandsExist || rulesExist) && !args.force) {\n const existingItems: string[] = [];\n if (commandsExist) existingItems.push(\"commands\");\n if (rulesExist) existingItems.push(\"rules\");\n\n const shouldContinue = await p.confirm({\n message: `Existing ${existingItems.join(\" and \")} found. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n\n try {\n ensureDir(cursorDir);\n\n if (shouldInitCommands) {\n s.start(\"Fetching commands templates...\");\n await downloadTemplate(`${REPO_URL}/templates/commands#${REPO_REF}`, {\n dir: commandsDir,\n force: true,\n });\n s.stop(\"Commands initialized\");\n }\n\n if (shouldInitRules) {\n s.start(\"Fetching rules templates...\");\n await downloadTemplate(`${REPO_URL}/templates/rules#${REPO_REF}`, {\n dir: rulesDir,\n force: true,\n });\n s.stop(\"Rules initialized\");\n }\n\n printDivider();\n console.log();\n\n const commandFiles = listFiles(commandsDir, \".md\");\n const ruleFiles = listFiles(rulesDir, \".mdc\");\n\n if (shouldInitCommands && commandFiles.length > 0) {\n printSuccess(\n `Commands: ${highlight(commandFiles.length.toString())} templates`\n );\n commandFiles.forEach((f) => {\n console.log(pc.dim(` └─ ${f}`));\n });\n }\n\n if (shouldInitRules && ruleFiles.length > 0) {\n printSuccess(\n `Rules: ${highlight(ruleFiles.length.toString())} templates`\n );\n ruleFiles.forEach((f) => {\n console.log(pc.dim(` └─ ${f}`));\n });\n }\n\n console.log();\n p.outro(pc.green(\"✨ Cursor Kit initialized successfully!\"));\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n process.exit(1);\n }\n },\n});\n","import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, statSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nexport function ensureDir(path: string): void {\n if (!existsSync(path)) {\n mkdirSync(path, { recursive: true });\n }\n}\n\nexport function fileExists(path: string): boolean {\n return existsSync(path);\n}\n\nexport function dirExists(path: string): boolean {\n return existsSync(path) && statSync(path).isDirectory();\n}\n\nexport function readFile(path: string): string {\n return readFileSync(path, \"utf-8\");\n}\n\nexport function writeFile(path: string, content: string): void {\n ensureDir(dirname(path));\n writeFileSync(path, content, \"utf-8\");\n}\n\nexport function removeFile(path: string): void {\n if (existsSync(path)) {\n rmSync(path, { recursive: true });\n }\n}\n\nexport function listFiles(dir: string, extension?: string): string[] {\n if (!dirExists(dir)) return [];\n \n const files = readdirSync(dir);\n if (extension) {\n return files.filter((f) => f.endsWith(extension));\n }\n return files;\n}\n\nexport function getCursorDir(cwd: string = process.cwd()): string {\n return join(cwd, \".cursor\");\n}\n\nexport function getCommandsDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"commands\");\n}\n\nexport function getRulesDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"rules\");\n}\n\nexport function resolveFromCwd(...paths: string[]): string {\n return resolve(process.cwd(), ...paths);\n}\n\nexport function getPackageJson(cwd: string = process.cwd()): Record<string, unknown> | null {\n const pkgPath = join(cwd, \"package.json\");\n if (!fileExists(pkgPath)) return null;\n \n try {\n return JSON.parse(readFile(pkgPath));\n } catch {\n return null;\n }\n}\n\n","export const REPO_URL = \"github:duongductrong/cursor-kit\";\nexport const REPO_REF = \"master\";\nexport const REPO_RAW_URL = \"https://raw.githubusercontent.com/duongductrong/cursor-kit/master\";\n\nexport const CURSOR_DIR = \".cursor\";\nexport const COMMANDS_DIR = \"commands\";\nexport const RULES_DIR = \"rules\";\n\nexport const COMMAND_EXTENSION = \".md\";\nexport const RULE_EXTENSION = \".mdc\";\n\nexport const CONFIG_FILE = \".cursorkit\";\n\nexport const TEMPLATE_PATHS = {\n commands: \"templates/commands\",\n rules: \"templates/rules\",\n} as const;\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n ensureDir,\n getCommandsDir,\n getRulesDir,\n writeFile,\n fileExists,\n} from \"../utils/fs\";\nimport { highlight } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ntype ItemType = \"command\" | \"rule\";\n\nconst COMMAND_TEMPLATE = `You are a helpful assistant. Describe what this command does.\n\n## Instructions\n- Step 1: ...\n- Step 2: ...\n\n## Rules\n- Be concise\n- Focus on the task\n\nSTART: Wait for user input.\n`;\n\nconst RULE_TEMPLATE = `---\ndescription: Describe when this rule should apply\nglobs: \nalwaysApply: false\n---\n\n# Rule Title\n\nDescribe the rule behavior here.\n\n## Guidelines\n- Guideline 1\n- Guideline 2\n`;\n\nfunction generateSlug(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, \"\")\n .replace(/\\s+/g, \"-\")\n .replace(/-+/g, \"-\")\n .trim();\n}\n\nexport const addCommand = defineCommand({\n meta: {\n name: \"add\",\n description: \"Add a new command or rule\",\n },\n args: {\n type: {\n type: \"string\",\n alias: \"t\",\n description: \"Type: 'command' or 'rule'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the command or rule\",\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit add \")));\n\n let itemType: ItemType;\n let itemName: string;\n\n if (args.type && [\"command\", \"rule\"].includes(args.type)) {\n itemType = args.type as ItemType;\n } else {\n const typeResult = await p.select({\n message: \"What do you want to add?\",\n options: [\n {\n value: \"command\",\n label: \"Command\",\n hint: \"A reusable prompt template\",\n },\n {\n value: \"rule\",\n label: \"Rule\",\n hint: \"Project-specific AI behavior rules\",\n },\n ],\n });\n\n if (p.isCancel(typeResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemType = typeResult as ItemType;\n }\n\n if (args.name) {\n itemName = args.name;\n } else {\n const nameResult = await p.text({\n message: `Enter ${itemType} name:`,\n placeholder: itemType === \"command\" ? \"my-command\" : \"my-rule\",\n validate: (value) => {\n if (!value.trim()) return \"Name is required\";\n if (value.length < 2) return \"Name must be at least 2 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemName = nameResult;\n }\n\n const slug = generateSlug(itemName);\n const isCommand = itemType === \"command\";\n const targetDir = isCommand ? getCommandsDir() : getRulesDir();\n const extension = isCommand ? \".md\" : \".mdc\";\n const filePath = join(targetDir, `${slug}${extension}`);\n\n if (fileExists(filePath)) {\n const shouldOverwrite = await p.confirm({\n message: `${highlight(slug + extension)} already exists. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n s.start(`Creating ${itemType}...`);\n\n try {\n ensureDir(targetDir);\n const template = isCommand ? COMMAND_TEMPLATE : RULE_TEMPLATE;\n writeFile(filePath, template);\n\n s.stop(`${itemType.charAt(0).toUpperCase() + itemType.slice(1)} created`);\n\n console.log();\n console.log(pc.dim(\" File: \") + highlight(filePath));\n console.log();\n\n p.outro(\n pc.green(`✨ ${itemType.charAt(0).toUpperCase() + itemType.slice(1)} created! Edit the file to customize it.`)\n );\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { downloadTemplate } from \"giget\";\nimport {\n ensureDir,\n getCommandsDir,\n getRulesDir,\n listFiles,\n getCursorDir,\n} from \"../utils/fs\";\nimport { REPO_URL, REPO_REF } from \"../utils/constants\";\nimport { highlight, printDivider, printSuccess, printInfo } from \"../utils/branding\";\n\nexport const pullCommand = defineCommand({\n meta: {\n name: \"pull\",\n description: \"Pull latest updates from cursor-kit repository\",\n },\n args: {\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only pull commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only pull rules\",\n default: false,\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Force overwrite without confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n const pullBoth = !args.commands && !args.rules;\n const shouldPullCommands = pullBoth || args.commands;\n const shouldPullRules = pullBoth || args.rules;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit pull \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n\n const existingCommands = listFiles(commandsDir, \".md\");\n const existingRules = listFiles(rulesDir, \".mdc\");\n const hasExisting = existingCommands.length > 0 || existingRules.length > 0;\n\n if (hasExisting && !args.force) {\n printInfo(\"Current status:\");\n if (existingCommands.length > 0) {\n console.log(pc.dim(` Commands: ${existingCommands.length} files`));\n }\n if (existingRules.length > 0) {\n console.log(pc.dim(` Rules: ${existingRules.length} files`));\n }\n console.log();\n\n const shouldContinue = await p.confirm({\n message: \"This will merge with existing files. Continue?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n\n try {\n ensureDir(getCursorDir());\n\n if (shouldPullCommands) {\n s.start(\"Pulling commands...\");\n await downloadTemplate(`${REPO_URL}/templates/commands#${REPO_REF}`, {\n dir: commandsDir,\n force: true,\n });\n s.stop(\"Commands updated\");\n }\n\n if (shouldPullRules) {\n s.start(\"Pulling rules...\");\n await downloadTemplate(`${REPO_URL}/templates/rules#${REPO_REF}`, {\n dir: rulesDir,\n force: true,\n });\n s.stop(\"Rules updated\");\n }\n\n printDivider();\n console.log();\n\n const newCommands = listFiles(commandsDir, \".md\");\n const newRules = listFiles(rulesDir, \".mdc\");\n\n if (shouldPullCommands) {\n const added = newCommands.length - existingCommands.length;\n printSuccess(\n `Commands: ${highlight(newCommands.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n if (shouldPullRules) {\n const added = newRules.length - existingRules.length;\n printSuccess(\n `Rules: ${highlight(newRules.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n console.log();\n p.outro(pc.green(\"✨ Successfully pulled latest updates!\"));\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n getCommandsDir,\n getRulesDir,\n listFiles,\n readFile,\n fileExists,\n} from \"../utils/fs\";\nimport { highlight, printDivider } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ninterface ItemInfo {\n name: string;\n path: string;\n description?: string;\n}\n\nfunction extractDescription(content: string, isCommand: boolean): string | undefined {\n if (isCommand) {\n const firstLine = content.trim().split(\"\\n\")[0];\n if (firstLine && !firstLine.startsWith(\"#\") && !firstLine.startsWith(\"---\")) {\n return firstLine.slice(0, 60) + (firstLine.length > 60 ? \"...\" : \"\");\n }\n } else {\n const match = content.match(/description:\\s*(.+)/);\n if (match) {\n return match[1].trim().slice(0, 60) + (match[1].length > 60 ? \"...\" : \"\");\n }\n }\n return undefined;\n}\n\nfunction getItems(dir: string, extension: string, isCommand: boolean): ItemInfo[] {\n const files = listFiles(dir, extension);\n return files.map((file) => {\n const filePath = join(dir, file);\n const content = fileExists(filePath) ? readFile(filePath) : \"\";\n return {\n name: file.replace(extension, \"\"),\n path: filePath,\n description: extractDescription(content, isCommand),\n };\n });\n}\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all commands and rules\",\n },\n args: {\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only list commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only list rules\",\n default: false,\n },\n verbose: {\n type: \"boolean\",\n alias: \"v\",\n description: \"Show full file paths\",\n default: false,\n },\n },\n async run({ args }) {\n const listBoth = !args.commands && !args.rules;\n const shouldListCommands = listBoth || args.commands;\n const shouldListRules = listBoth || args.rules;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit list \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n\n const commands = shouldListCommands ? getItems(commandsDir, \".md\", true) : [];\n const rules = shouldListRules ? getItems(rulesDir, \".mdc\", false) : [];\n\n if (commands.length === 0 && rules.length === 0) {\n console.log();\n console.log(pc.yellow(\" No commands or rules found.\"));\n console.log(pc.dim(\" Run \") + highlight(\"cursor-kit init\") + pc.dim(\" to get started.\"));\n console.log();\n p.outro(pc.dim(\"Nothing to show\"));\n return;\n }\n\n printDivider();\n\n if (shouldListCommands && commands.length > 0) {\n console.log();\n console.log(pc.bold(pc.cyan(\" 📜 Commands\")) + pc.dim(` (${commands.length})`));\n console.log();\n\n commands.forEach((cmd) => {\n console.log(` ${pc.green(\"●\")} ${highlight(cmd.name)}`);\n if (cmd.description) {\n console.log(pc.dim(` ${cmd.description}`));\n }\n if (args.verbose) {\n console.log(pc.dim(` ${cmd.path}`));\n }\n });\n }\n\n if (shouldListRules && rules.length > 0) {\n console.log();\n console.log(pc.bold(pc.cyan(\" 📋 Rules\")) + pc.dim(` (${rules.length})`));\n console.log();\n\n rules.forEach((rule) => {\n console.log(` ${pc.green(\"●\")} ${highlight(rule.name)}`);\n if (rule.description) {\n console.log(pc.dim(` ${rule.description}`));\n }\n if (args.verbose) {\n console.log(pc.dim(` ${rule.path}`));\n }\n });\n }\n\n console.log();\n printDivider();\n\n const total = commands.length + rules.length;\n p.outro(pc.dim(`Total: ${total} item${total !== 1 ? \"s\" : \"\"}`));\n },\n});\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n getCommandsDir,\n getRulesDir,\n listFiles,\n removeFile,\n fileExists,\n} from \"../utils/fs\";\nimport { highlight, printSuccess } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ntype ItemType = \"command\" | \"rule\";\n\ninterface SelectOption {\n value: string;\n label: string;\n hint?: string;\n}\n\nexport const removeCommand = defineCommand({\n meta: {\n name: \"remove\",\n description: \"Remove a command or rule\",\n },\n args: {\n type: {\n type: \"string\",\n alias: \"t\",\n description: \"Type: 'command' or 'rule'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the command or rule to remove\",\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Skip confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit remove \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n\n const commands = listFiles(commandsDir, \".md\").map((f) => f.replace(\".md\", \"\"));\n const rules = listFiles(rulesDir, \".mdc\").map((f) => f.replace(\".mdc\", \"\"));\n\n if (commands.length === 0 && rules.length === 0) {\n console.log();\n console.log(pc.yellow(\" No commands or rules to remove.\"));\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n }\n\n let itemType: ItemType;\n let itemName: string;\n\n if (args.type && [\"command\", \"rule\"].includes(args.type)) {\n itemType = args.type as ItemType;\n } else {\n const typeOptions: SelectOption[] = [];\n\n if (commands.length > 0) {\n typeOptions.push({\n value: \"command\",\n label: \"Command\",\n hint: `${commands.length} available`,\n });\n }\n\n if (rules.length > 0) {\n typeOptions.push({\n value: \"rule\",\n label: \"Rule\",\n hint: `${rules.length} available`,\n });\n }\n\n const typeResult = await p.select({\n message: \"What do you want to remove?\",\n options: typeOptions,\n });\n\n if (p.isCancel(typeResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemType = typeResult as ItemType;\n }\n\n const isCommand = itemType === \"command\";\n const items = isCommand ? commands : rules;\n const dir = isCommand ? commandsDir : rulesDir;\n const extension = isCommand ? \".md\" : \".mdc\";\n\n if (items.length === 0) {\n p.cancel(`No ${itemType}s found`);\n process.exit(0);\n }\n\n if (args.name && items.includes(args.name)) {\n itemName = args.name;\n } else {\n const itemOptions: SelectOption[] = items.map((item) => ({\n value: item,\n label: item,\n }));\n\n const nameResult = await p.select({\n message: `Select ${itemType} to remove:`,\n options: itemOptions,\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemName = nameResult as string;\n }\n\n const filePath = join(dir, `${itemName}${extension}`);\n\n if (!fileExists(filePath)) {\n p.cancel(`${itemType} '${itemName}' not found`);\n process.exit(1);\n }\n\n if (!args.force) {\n const shouldDelete = await p.confirm({\n message: `Are you sure you want to delete ${highlight(itemName + extension)}?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldDelete) || !shouldDelete) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n try {\n removeFile(filePath);\n console.log();\n printSuccess(`Removed ${highlight(itemName + extension)}`);\n console.log();\n p.outro(pc.green(\"✨ Done!\"));\n } catch (error) {\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n\n"],"mappings":"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","names":["defineCommand","text","pc","pc","defineCommand","p","pc","join","defineCommand","pc","defineCommand","p","pc","downloadTemplate","defineCommand","pc","downloadTemplate","defineCommand","p","pc","join","defineCommand","pc","defineCommand","p","pc","join","defineCommand","pc","defineCommand"]}
package/dist/index.cjs ADDED
@@ -0,0 +1,227 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/index.ts
32
+ var src_exports = {};
33
+ __export(src_exports, {
34
+ COMMANDS_DIR: () => COMMANDS_DIR,
35
+ COMMAND_EXTENSION: () => COMMAND_EXTENSION,
36
+ CONFIG_FILE: () => CONFIG_FILE,
37
+ CURSOR_DIR: () => CURSOR_DIR,
38
+ REPO_RAW_URL: () => REPO_RAW_URL,
39
+ REPO_REF: () => REPO_REF,
40
+ REPO_URL: () => REPO_URL,
41
+ RULES_DIR: () => RULES_DIR,
42
+ RULE_EXTENSION: () => RULE_EXTENSION,
43
+ TEMPLATE_PATHS: () => TEMPLATE_PATHS,
44
+ bold: () => bold,
45
+ dim: () => dim,
46
+ dirExists: () => dirExists,
47
+ ensureDir: () => ensureDir,
48
+ fileExists: () => fileExists,
49
+ getCommandsDir: () => getCommandsDir,
50
+ getCursorDir: () => getCursorDir,
51
+ getPackageJson: () => getPackageJson,
52
+ getRulesDir: () => getRulesDir,
53
+ gradientText: () => gradientText,
54
+ highlight: () => highlight,
55
+ listFiles: () => listFiles,
56
+ printBanner: () => printBanner,
57
+ printDivider: () => printDivider,
58
+ printError: () => printError,
59
+ printInfo: () => printInfo,
60
+ printSuccess: () => printSuccess,
61
+ printVersion: () => printVersion,
62
+ printWarning: () => printWarning,
63
+ readFile: () => readFile,
64
+ removeFile: () => removeFile,
65
+ resolveFromCwd: () => resolveFromCwd,
66
+ writeFile: () => writeFile
67
+ });
68
+ module.exports = __toCommonJS(src_exports);
69
+
70
+ // src/utils/branding.ts
71
+ var import_figlet = __toESM(require("figlet"), 1);
72
+ var import_gradient_string = __toESM(require("gradient-string"), 1);
73
+ var import_picocolors = __toESM(require("picocolors"), 1);
74
+ var cursorGradient = (0, import_gradient_string.default)(["#00DC82", "#36E4DA", "#0047E1"]);
75
+ function printBanner() {
76
+ const banner = import_figlet.default.textSync("Cursor Kit", {
77
+ font: "ANSI Shadow",
78
+ horizontalLayout: "fitted"
79
+ });
80
+ console.log(cursorGradient.multiline(banner));
81
+ console.log();
82
+ console.log(
83
+ import_picocolors.default.dim(" ") + import_picocolors.default.bold(import_picocolors.default.cyan("\u2726")) + import_picocolors.default.dim(" Supercharge your Cursor IDE with rules & commands")
84
+ );
85
+ console.log();
86
+ }
87
+ function printSuccess(message) {
88
+ console.log(import_picocolors.default.green("\u2713") + import_picocolors.default.dim(" ") + message);
89
+ }
90
+ function printError(message) {
91
+ console.log(import_picocolors.default.red("\u2717") + import_picocolors.default.dim(" ") + message);
92
+ }
93
+ function printInfo(message) {
94
+ console.log(import_picocolors.default.cyan("\u2139") + import_picocolors.default.dim(" ") + message);
95
+ }
96
+ function printWarning(message) {
97
+ console.log(import_picocolors.default.yellow("\u26A0") + import_picocolors.default.dim(" ") + message);
98
+ }
99
+ function printDivider() {
100
+ console.log(import_picocolors.default.dim("\u2500".repeat(50)));
101
+ }
102
+ function printVersion(version) {
103
+ console.log(
104
+ import_picocolors.default.dim(" v") + cursorGradient(version) + import_picocolors.default.dim(" \u2022 Made with \u2665")
105
+ );
106
+ console.log();
107
+ }
108
+ function highlight(text) {
109
+ return import_picocolors.default.cyan(text);
110
+ }
111
+ function dim(text) {
112
+ return import_picocolors.default.dim(text);
113
+ }
114
+ function bold(text) {
115
+ return import_picocolors.default.bold(text);
116
+ }
117
+ function gradientText(text) {
118
+ return cursorGradient(text);
119
+ }
120
+
121
+ // src/utils/fs.ts
122
+ var import_node_fs = require("fs");
123
+ var import_node_path = require("path");
124
+ function ensureDir(path) {
125
+ if (!(0, import_node_fs.existsSync)(path)) {
126
+ (0, import_node_fs.mkdirSync)(path, { recursive: true });
127
+ }
128
+ }
129
+ function fileExists(path) {
130
+ return (0, import_node_fs.existsSync)(path);
131
+ }
132
+ function dirExists(path) {
133
+ return (0, import_node_fs.existsSync)(path) && (0, import_node_fs.statSync)(path).isDirectory();
134
+ }
135
+ function readFile(path) {
136
+ return (0, import_node_fs.readFileSync)(path, "utf-8");
137
+ }
138
+ function writeFile(path, content) {
139
+ ensureDir((0, import_node_path.dirname)(path));
140
+ (0, import_node_fs.writeFileSync)(path, content, "utf-8");
141
+ }
142
+ function removeFile(path) {
143
+ if ((0, import_node_fs.existsSync)(path)) {
144
+ (0, import_node_fs.rmSync)(path, { recursive: true });
145
+ }
146
+ }
147
+ function listFiles(dir, extension) {
148
+ if (!dirExists(dir)) return [];
149
+ const files = (0, import_node_fs.readdirSync)(dir);
150
+ if (extension) {
151
+ return files.filter((f) => f.endsWith(extension));
152
+ }
153
+ return files;
154
+ }
155
+ function getCursorDir(cwd = process.cwd()) {
156
+ return (0, import_node_path.join)(cwd, ".cursor");
157
+ }
158
+ function getCommandsDir(cwd = process.cwd()) {
159
+ return (0, import_node_path.join)(getCursorDir(cwd), "commands");
160
+ }
161
+ function getRulesDir(cwd = process.cwd()) {
162
+ return (0, import_node_path.join)(getCursorDir(cwd), "rules");
163
+ }
164
+ function resolveFromCwd(...paths) {
165
+ return (0, import_node_path.resolve)(process.cwd(), ...paths);
166
+ }
167
+ function getPackageJson(cwd = process.cwd()) {
168
+ const pkgPath = (0, import_node_path.join)(cwd, "package.json");
169
+ if (!fileExists(pkgPath)) return null;
170
+ try {
171
+ return JSON.parse(readFile(pkgPath));
172
+ } catch {
173
+ return null;
174
+ }
175
+ }
176
+
177
+ // src/utils/constants.ts
178
+ var REPO_URL = "github:duongductrong/cursor-kit";
179
+ var REPO_REF = "master";
180
+ var REPO_RAW_URL = "https://raw.githubusercontent.com/duongductrong/cursor-kit/master";
181
+ var CURSOR_DIR = ".cursor";
182
+ var COMMANDS_DIR = "commands";
183
+ var RULES_DIR = "rules";
184
+ var COMMAND_EXTENSION = ".md";
185
+ var RULE_EXTENSION = ".mdc";
186
+ var CONFIG_FILE = ".cursorkit";
187
+ var TEMPLATE_PATHS = {
188
+ commands: "templates/commands",
189
+ rules: "templates/rules"
190
+ };
191
+ // Annotate the CommonJS export names for ESM import in node:
192
+ 0 && (module.exports = {
193
+ COMMANDS_DIR,
194
+ COMMAND_EXTENSION,
195
+ CONFIG_FILE,
196
+ CURSOR_DIR,
197
+ REPO_RAW_URL,
198
+ REPO_REF,
199
+ REPO_URL,
200
+ RULES_DIR,
201
+ RULE_EXTENSION,
202
+ TEMPLATE_PATHS,
203
+ bold,
204
+ dim,
205
+ dirExists,
206
+ ensureDir,
207
+ fileExists,
208
+ getCommandsDir,
209
+ getCursorDir,
210
+ getPackageJson,
211
+ getRulesDir,
212
+ gradientText,
213
+ highlight,
214
+ listFiles,
215
+ printBanner,
216
+ printDivider,
217
+ printError,
218
+ printInfo,
219
+ printSuccess,
220
+ printVersion,
221
+ printWarning,
222
+ readFile,
223
+ removeFile,
224
+ resolveFromCwd,
225
+ writeFile
226
+ });
227
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/branding.ts","../src/utils/fs.ts","../src/utils/constants.ts"],"sourcesContent":["export * from \"./utils/branding\";\nexport * from \"./utils/fs\";\nexport * from \"./utils/constants\";\n\n","import figlet from \"figlet\";\nimport gradient from \"gradient-string\";\nimport pc from \"picocolors\";\n\nconst cursorGradient = gradient([\"#00DC82\", \"#36E4DA\", \"#0047E1\"]);\n\nexport function printBanner(): void {\n const banner = figlet.textSync(\"Cursor Kit\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"fitted\",\n });\n\n console.log(cursorGradient.multiline(banner));\n console.log();\n console.log(\n pc.dim(\" \") +\n pc.bold(pc.cyan(\"✦\")) +\n pc.dim(\" Supercharge your Cursor IDE with rules & commands\")\n );\n console.log();\n}\n\nexport function printSuccess(message: string): void {\n console.log(pc.green(\"✓\") + pc.dim(\" \") + message);\n}\n\nexport function printError(message: string): void {\n console.log(pc.red(\"✗\") + pc.dim(\" \") + message);\n}\n\nexport function printInfo(message: string): void {\n console.log(pc.cyan(\"ℹ\") + pc.dim(\" \") + message);\n}\n\nexport function printWarning(message: string): void {\n console.log(pc.yellow(\"⚠\") + pc.dim(\" \") + message);\n}\n\nexport function printDivider(): void {\n console.log(pc.dim(\"─\".repeat(50)));\n}\n\nexport function printVersion(version: string): void {\n console.log(\n pc.dim(\" v\") + cursorGradient(version) + pc.dim(\" • Made with ♥\")\n );\n console.log();\n}\n\nexport function highlight(text: string): string {\n return pc.cyan(text);\n}\n\nexport function dim(text: string): string {\n return pc.dim(text);\n}\n\nexport function bold(text: string): string {\n return pc.bold(text);\n}\n\nexport function gradientText(text: string): string {\n return cursorGradient(text);\n}\n\n","import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, statSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nexport function ensureDir(path: string): void {\n if (!existsSync(path)) {\n mkdirSync(path, { recursive: true });\n }\n}\n\nexport function fileExists(path: string): boolean {\n return existsSync(path);\n}\n\nexport function dirExists(path: string): boolean {\n return existsSync(path) && statSync(path).isDirectory();\n}\n\nexport function readFile(path: string): string {\n return readFileSync(path, \"utf-8\");\n}\n\nexport function writeFile(path: string, content: string): void {\n ensureDir(dirname(path));\n writeFileSync(path, content, \"utf-8\");\n}\n\nexport function removeFile(path: string): void {\n if (existsSync(path)) {\n rmSync(path, { recursive: true });\n }\n}\n\nexport function listFiles(dir: string, extension?: string): string[] {\n if (!dirExists(dir)) return [];\n \n const files = readdirSync(dir);\n if (extension) {\n return files.filter((f) => f.endsWith(extension));\n }\n return files;\n}\n\nexport function getCursorDir(cwd: string = process.cwd()): string {\n return join(cwd, \".cursor\");\n}\n\nexport function getCommandsDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"commands\");\n}\n\nexport function getRulesDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"rules\");\n}\n\nexport function resolveFromCwd(...paths: string[]): string {\n return resolve(process.cwd(), ...paths);\n}\n\nexport function getPackageJson(cwd: string = process.cwd()): Record<string, unknown> | null {\n const pkgPath = join(cwd, \"package.json\");\n if (!fileExists(pkgPath)) return null;\n \n try {\n return JSON.parse(readFile(pkgPath));\n } catch {\n return null;\n }\n}\n\n","export const REPO_URL = \"github:duongductrong/cursor-kit\";\nexport const REPO_REF = \"master\";\nexport const REPO_RAW_URL = \"https://raw.githubusercontent.com/duongductrong/cursor-kit/master\";\n\nexport const CURSOR_DIR = \".cursor\";\nexport const COMMANDS_DIR = \"commands\";\nexport const RULES_DIR = \"rules\";\n\nexport const COMMAND_EXTENSION = \".md\";\nexport const RULE_EXTENSION = \".mdc\";\n\nexport const CONFIG_FILE = \".cursorkit\";\n\nexport const TEMPLATE_PATHS = {\n commands: \"templates/commands\",\n rules: \"templates/rules\",\n} as const;\n\n"],"mappings":"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","names":["gradient","figlet","pc"]}
@@ -0,0 +1,40 @@
1
+ declare function printBanner(): void;
2
+ declare function printSuccess(message: string): void;
3
+ declare function printError(message: string): void;
4
+ declare function printInfo(message: string): void;
5
+ declare function printWarning(message: string): void;
6
+ declare function printDivider(): void;
7
+ declare function printVersion(version: string): void;
8
+ declare function highlight(text: string): string;
9
+ declare function dim(text: string): string;
10
+ declare function bold(text: string): string;
11
+ declare function gradientText(text: string): string;
12
+
13
+ declare function ensureDir(path: string): void;
14
+ declare function fileExists(path: string): boolean;
15
+ declare function dirExists(path: string): boolean;
16
+ declare function readFile(path: string): string;
17
+ declare function writeFile(path: string, content: string): void;
18
+ declare function removeFile(path: string): void;
19
+ declare function listFiles(dir: string, extension?: string): string[];
20
+ declare function getCursorDir(cwd?: string): string;
21
+ declare function getCommandsDir(cwd?: string): string;
22
+ declare function getRulesDir(cwd?: string): string;
23
+ declare function resolveFromCwd(...paths: string[]): string;
24
+ declare function getPackageJson(cwd?: string): Record<string, unknown> | null;
25
+
26
+ declare const REPO_URL = "github:duongductrong/cursor-kit";
27
+ declare const REPO_REF = "master";
28
+ declare const REPO_RAW_URL = "https://raw.githubusercontent.com/duongductrong/cursor-kit/master";
29
+ declare const CURSOR_DIR = ".cursor";
30
+ declare const COMMANDS_DIR = "commands";
31
+ declare const RULES_DIR = "rules";
32
+ declare const COMMAND_EXTENSION = ".md";
33
+ declare const RULE_EXTENSION = ".mdc";
34
+ declare const CONFIG_FILE = ".cursorkit";
35
+ declare const TEMPLATE_PATHS: {
36
+ readonly commands: "templates/commands";
37
+ readonly rules: "templates/rules";
38
+ };
39
+
40
+ export { COMMANDS_DIR, COMMAND_EXTENSION, CONFIG_FILE, CURSOR_DIR, REPO_RAW_URL, REPO_REF, REPO_URL, RULES_DIR, RULE_EXTENSION, TEMPLATE_PATHS, bold, dim, dirExists, ensureDir, fileExists, getCommandsDir, getCursorDir, getPackageJson, getRulesDir, gradientText, highlight, listFiles, printBanner, printDivider, printError, printInfo, printSuccess, printVersion, printWarning, readFile, removeFile, resolveFromCwd, writeFile };
@@ -0,0 +1,40 @@
1
+ declare function printBanner(): void;
2
+ declare function printSuccess(message: string): void;
3
+ declare function printError(message: string): void;
4
+ declare function printInfo(message: string): void;
5
+ declare function printWarning(message: string): void;
6
+ declare function printDivider(): void;
7
+ declare function printVersion(version: string): void;
8
+ declare function highlight(text: string): string;
9
+ declare function dim(text: string): string;
10
+ declare function bold(text: string): string;
11
+ declare function gradientText(text: string): string;
12
+
13
+ declare function ensureDir(path: string): void;
14
+ declare function fileExists(path: string): boolean;
15
+ declare function dirExists(path: string): boolean;
16
+ declare function readFile(path: string): string;
17
+ declare function writeFile(path: string, content: string): void;
18
+ declare function removeFile(path: string): void;
19
+ declare function listFiles(dir: string, extension?: string): string[];
20
+ declare function getCursorDir(cwd?: string): string;
21
+ declare function getCommandsDir(cwd?: string): string;
22
+ declare function getRulesDir(cwd?: string): string;
23
+ declare function resolveFromCwd(...paths: string[]): string;
24
+ declare function getPackageJson(cwd?: string): Record<string, unknown> | null;
25
+
26
+ declare const REPO_URL = "github:duongductrong/cursor-kit";
27
+ declare const REPO_REF = "master";
28
+ declare const REPO_RAW_URL = "https://raw.githubusercontent.com/duongductrong/cursor-kit/master";
29
+ declare const CURSOR_DIR = ".cursor";
30
+ declare const COMMANDS_DIR = "commands";
31
+ declare const RULES_DIR = "rules";
32
+ declare const COMMAND_EXTENSION = ".md";
33
+ declare const RULE_EXTENSION = ".mdc";
34
+ declare const CONFIG_FILE = ".cursorkit";
35
+ declare const TEMPLATE_PATHS: {
36
+ readonly commands: "templates/commands";
37
+ readonly rules: "templates/rules";
38
+ };
39
+
40
+ export { COMMANDS_DIR, COMMAND_EXTENSION, CONFIG_FILE, CURSOR_DIR, REPO_RAW_URL, REPO_REF, REPO_URL, RULES_DIR, RULE_EXTENSION, TEMPLATE_PATHS, bold, dim, dirExists, ensureDir, fileExists, getCommandsDir, getCursorDir, getPackageJson, getRulesDir, gradientText, highlight, listFiles, printBanner, printDivider, printError, printInfo, printSuccess, printVersion, printWarning, readFile, removeFile, resolveFromCwd, writeFile };
package/dist/index.js ADDED
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/utils/branding.ts
4
+ import figlet from "figlet";
5
+ import gradient from "gradient-string";
6
+ import pc from "picocolors";
7
+ var cursorGradient = gradient(["#00DC82", "#36E4DA", "#0047E1"]);
8
+ function printBanner() {
9
+ const banner = figlet.textSync("Cursor Kit", {
10
+ font: "ANSI Shadow",
11
+ horizontalLayout: "fitted"
12
+ });
13
+ console.log(cursorGradient.multiline(banner));
14
+ console.log();
15
+ console.log(
16
+ pc.dim(" ") + pc.bold(pc.cyan("\u2726")) + pc.dim(" Supercharge your Cursor IDE with rules & commands")
17
+ );
18
+ console.log();
19
+ }
20
+ function printSuccess(message) {
21
+ console.log(pc.green("\u2713") + pc.dim(" ") + message);
22
+ }
23
+ function printError(message) {
24
+ console.log(pc.red("\u2717") + pc.dim(" ") + message);
25
+ }
26
+ function printInfo(message) {
27
+ console.log(pc.cyan("\u2139") + pc.dim(" ") + message);
28
+ }
29
+ function printWarning(message) {
30
+ console.log(pc.yellow("\u26A0") + pc.dim(" ") + message);
31
+ }
32
+ function printDivider() {
33
+ console.log(pc.dim("\u2500".repeat(50)));
34
+ }
35
+ function printVersion(version) {
36
+ console.log(
37
+ pc.dim(" v") + cursorGradient(version) + pc.dim(" \u2022 Made with \u2665")
38
+ );
39
+ console.log();
40
+ }
41
+ function highlight(text) {
42
+ return pc.cyan(text);
43
+ }
44
+ function dim(text) {
45
+ return pc.dim(text);
46
+ }
47
+ function bold(text) {
48
+ return pc.bold(text);
49
+ }
50
+ function gradientText(text) {
51
+ return cursorGradient(text);
52
+ }
53
+
54
+ // src/utils/fs.ts
55
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, statSync } from "fs";
56
+ import { dirname, join, resolve } from "path";
57
+ function ensureDir(path) {
58
+ if (!existsSync(path)) {
59
+ mkdirSync(path, { recursive: true });
60
+ }
61
+ }
62
+ function fileExists(path) {
63
+ return existsSync(path);
64
+ }
65
+ function dirExists(path) {
66
+ return existsSync(path) && statSync(path).isDirectory();
67
+ }
68
+ function readFile(path) {
69
+ return readFileSync(path, "utf-8");
70
+ }
71
+ function writeFile(path, content) {
72
+ ensureDir(dirname(path));
73
+ writeFileSync(path, content, "utf-8");
74
+ }
75
+ function removeFile(path) {
76
+ if (existsSync(path)) {
77
+ rmSync(path, { recursive: true });
78
+ }
79
+ }
80
+ function listFiles(dir, extension) {
81
+ if (!dirExists(dir)) return [];
82
+ const files = readdirSync(dir);
83
+ if (extension) {
84
+ return files.filter((f) => f.endsWith(extension));
85
+ }
86
+ return files;
87
+ }
88
+ function getCursorDir(cwd = process.cwd()) {
89
+ return join(cwd, ".cursor");
90
+ }
91
+ function getCommandsDir(cwd = process.cwd()) {
92
+ return join(getCursorDir(cwd), "commands");
93
+ }
94
+ function getRulesDir(cwd = process.cwd()) {
95
+ return join(getCursorDir(cwd), "rules");
96
+ }
97
+ function resolveFromCwd(...paths) {
98
+ return resolve(process.cwd(), ...paths);
99
+ }
100
+ function getPackageJson(cwd = process.cwd()) {
101
+ const pkgPath = join(cwd, "package.json");
102
+ if (!fileExists(pkgPath)) return null;
103
+ try {
104
+ return JSON.parse(readFile(pkgPath));
105
+ } catch {
106
+ return null;
107
+ }
108
+ }
109
+
110
+ // src/utils/constants.ts
111
+ var REPO_URL = "github:duongductrong/cursor-kit";
112
+ var REPO_REF = "master";
113
+ var REPO_RAW_URL = "https://raw.githubusercontent.com/duongductrong/cursor-kit/master";
114
+ var CURSOR_DIR = ".cursor";
115
+ var COMMANDS_DIR = "commands";
116
+ var RULES_DIR = "rules";
117
+ var COMMAND_EXTENSION = ".md";
118
+ var RULE_EXTENSION = ".mdc";
119
+ var CONFIG_FILE = ".cursorkit";
120
+ var TEMPLATE_PATHS = {
121
+ commands: "templates/commands",
122
+ rules: "templates/rules"
123
+ };
124
+ export {
125
+ COMMANDS_DIR,
126
+ COMMAND_EXTENSION,
127
+ CONFIG_FILE,
128
+ CURSOR_DIR,
129
+ REPO_RAW_URL,
130
+ REPO_REF,
131
+ REPO_URL,
132
+ RULES_DIR,
133
+ RULE_EXTENSION,
134
+ TEMPLATE_PATHS,
135
+ bold,
136
+ dim,
137
+ dirExists,
138
+ ensureDir,
139
+ fileExists,
140
+ getCommandsDir,
141
+ getCursorDir,
142
+ getPackageJson,
143
+ getRulesDir,
144
+ gradientText,
145
+ highlight,
146
+ listFiles,
147
+ printBanner,
148
+ printDivider,
149
+ printError,
150
+ printInfo,
151
+ printSuccess,
152
+ printVersion,
153
+ printWarning,
154
+ readFile,
155
+ removeFile,
156
+ resolveFromCwd,
157
+ writeFile
158
+ };
159
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/branding.ts","../src/utils/fs.ts","../src/utils/constants.ts"],"sourcesContent":["import figlet from \"figlet\";\nimport gradient from \"gradient-string\";\nimport pc from \"picocolors\";\n\nconst cursorGradient = gradient([\"#00DC82\", \"#36E4DA\", \"#0047E1\"]);\n\nexport function printBanner(): void {\n const banner = figlet.textSync(\"Cursor Kit\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"fitted\",\n });\n\n console.log(cursorGradient.multiline(banner));\n console.log();\n console.log(\n pc.dim(\" \") +\n pc.bold(pc.cyan(\"✦\")) +\n pc.dim(\" Supercharge your Cursor IDE with rules & commands\")\n );\n console.log();\n}\n\nexport function printSuccess(message: string): void {\n console.log(pc.green(\"✓\") + pc.dim(\" \") + message);\n}\n\nexport function printError(message: string): void {\n console.log(pc.red(\"✗\") + pc.dim(\" \") + message);\n}\n\nexport function printInfo(message: string): void {\n console.log(pc.cyan(\"ℹ\") + pc.dim(\" \") + message);\n}\n\nexport function printWarning(message: string): void {\n console.log(pc.yellow(\"⚠\") + pc.dim(\" \") + message);\n}\n\nexport function printDivider(): void {\n console.log(pc.dim(\"─\".repeat(50)));\n}\n\nexport function printVersion(version: string): void {\n console.log(\n pc.dim(\" v\") + cursorGradient(version) + pc.dim(\" • Made with ♥\")\n );\n console.log();\n}\n\nexport function highlight(text: string): string {\n return pc.cyan(text);\n}\n\nexport function dim(text: string): string {\n return pc.dim(text);\n}\n\nexport function bold(text: string): string {\n return pc.bold(text);\n}\n\nexport function gradientText(text: string): string {\n return cursorGradient(text);\n}\n\n","import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, statSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nexport function ensureDir(path: string): void {\n if (!existsSync(path)) {\n mkdirSync(path, { recursive: true });\n }\n}\n\nexport function fileExists(path: string): boolean {\n return existsSync(path);\n}\n\nexport function dirExists(path: string): boolean {\n return existsSync(path) && statSync(path).isDirectory();\n}\n\nexport function readFile(path: string): string {\n return readFileSync(path, \"utf-8\");\n}\n\nexport function writeFile(path: string, content: string): void {\n ensureDir(dirname(path));\n writeFileSync(path, content, \"utf-8\");\n}\n\nexport function removeFile(path: string): void {\n if (existsSync(path)) {\n rmSync(path, { recursive: true });\n }\n}\n\nexport function listFiles(dir: string, extension?: string): string[] {\n if (!dirExists(dir)) return [];\n \n const files = readdirSync(dir);\n if (extension) {\n return files.filter((f) => f.endsWith(extension));\n }\n return files;\n}\n\nexport function getCursorDir(cwd: string = process.cwd()): string {\n return join(cwd, \".cursor\");\n}\n\nexport function getCommandsDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"commands\");\n}\n\nexport function getRulesDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"rules\");\n}\n\nexport function resolveFromCwd(...paths: string[]): string {\n return resolve(process.cwd(), ...paths);\n}\n\nexport function getPackageJson(cwd: string = process.cwd()): Record<string, unknown> | null {\n const pkgPath = join(cwd, \"package.json\");\n if (!fileExists(pkgPath)) return null;\n \n try {\n return JSON.parse(readFile(pkgPath));\n } catch {\n return null;\n }\n}\n\n","export const REPO_URL = \"github:duongductrong/cursor-kit\";\nexport const REPO_REF = \"master\";\nexport const REPO_RAW_URL = \"https://raw.githubusercontent.com/duongductrong/cursor-kit/master\";\n\nexport const CURSOR_DIR = \".cursor\";\nexport const COMMANDS_DIR = \"commands\";\nexport const RULES_DIR = \"rules\";\n\nexport const COMMAND_EXTENSION = \".md\";\nexport const RULE_EXTENSION = \".mdc\";\n\nexport const CONFIG_FILE = \".cursorkit\";\n\nexport const TEMPLATE_PATHS = {\n commands: \"templates/commands\",\n rules: \"templates/rules\",\n} as const;\n\n"],"mappings":"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","names":[]}