UNPKG

ai-templates

Version:

CLI tool for generating AI templates for different frameworks and tools

172 lines • 7 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TemplateGenerator = void 0; exports.runCLI = runCLI; const inquirer_1 = __importDefault(require("inquirer")); const chalk_1 = __importDefault(require("chalk")); const fs = __importStar(require("fs-extra")); const path_1 = __importDefault(require("path")); const AI_OPTIONS = [ { name: 'Cursor', value: 'cursor' }, { name: 'Claude', value: 'claude' }, { name: 'Gemini', value: 'gemini' }, ]; const CATEGORY_OPTIONS = [ { name: 'Backend', value: 'backend' }, { name: 'Frontend', value: 'frontend' }, { name: 'Infrastructure', value: 'infra' }, ]; const FRAMEWORK_OPTIONS = { backend: [ { name: 'Fastify', value: 'fastify' }, { name: 'NestJS', value: 'nestjs' }, { name: 'Koa', value: 'koa' }, { name: 'Express', value: 'express' }, { name: 'Hapi', value: 'hapi' }, ], frontend: [ { name: 'React', value: 'react' }, { name: 'Vue', value: 'vue' }, { name: 'Angular', value: 'angular' }, { name: 'Svelte', value: 'svelte' }, { name: 'Next.js', value: 'nextjs' }, ], infra: [ { name: 'Docker', value: 'docker' }, { name: 'Kubernetes', value: 'kubernetes' }, { name: 'Terraform', value: 'terraform' }, { name: 'AWS CDK', value: 'aws-cdk' }, { name: 'Pulumi', value: 'pulumi' }, ], }; class TemplateGenerator { constructor() { // For development, use relative to source directory // For production, use relative to the distributed file this.templatesDir = path_1.default.join(__dirname, '..', 'templates'); } async selectAI() { console.log(chalk_1.default.blue('šŸš€ AI Templates Generator')); console.log(chalk_1.default.gray('Generate templates for your favorite AI tools\n')); const answers = await inquirer_1.default.prompt([ { type: 'list', name: 'ai', message: 'Please select the AI you want to use:', choices: AI_OPTIONS, }, ]); return answers.ai; } async selectCategory() { const answers = await inquirer_1.default.prompt([ { type: 'list', name: 'category', message: 'Please select the category:', choices: CATEGORY_OPTIONS, }, ]); return answers.category; } async selectFramework(category) { const frameworks = FRAMEWORK_OPTIONS[category]; if (!frameworks) { throw new Error(`No frameworks available for category: ${category}`); } const answers = await inquirer_1.default.prompt([ { type: 'list', name: 'framework', message: `Please select the ${category} framework:`, choices: frameworks, }, ]); return answers.framework; } async generateTemplate(ai, category, framework) { const templatePath = path_1.default.join(this.templatesDir, ai, category, framework); if (!(await fs.pathExists(templatePath))) { console.log(chalk_1.default.red(`āŒ Template not found for ${ai}/${category}/${framework}`)); return; } const outputDir = path_1.default.join(process.cwd(), `.${ai}`); await fs.ensureDir(outputDir); try { await fs.copy(templatePath, outputDir); // Post-process Cursor templates: migrate .cursorrules to the new .cursor/rules structure if (ai === 'cursor') { const oldRulesPath = path_1.default.join(outputDir, '.cursorrules'); if (await fs.pathExists(oldRulesPath)) { const rulesDir = path_1.default.join(outputDir, 'rules'); await fs.ensureDir(rulesDir); const newRulesPath = path_1.default.join(rulesDir, 'rules.mdc'); await fs.move(oldRulesPath, newRulesPath, { overwrite: true }); } } console.log(chalk_1.default.green(`āœ… Successfully generated ${ai} template for ${framework}!`)); console.log(chalk_1.default.gray(`šŸ“ Files created in: ${outputDir}`)); } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; console.log(chalk_1.default.red(`āŒ Error generating template: ${errorMessage}`)); } } } exports.TemplateGenerator = TemplateGenerator; async function runCLI() { const generator = new TemplateGenerator(); try { const ai = await generator.selectAI(); const category = await generator.selectCategory(); const framework = await generator.selectFramework(category); console.log(chalk_1.default.yellow(`\nšŸ”§ Generating ${ai} template for ${framework}...`)); await generator.generateTemplate(ai, category, framework); } catch (error) { if (error && typeof error === 'object' && 'isTtyError' in error) { console.log(chalk_1.default.red("āŒ Prompt couldn't be rendered in the current environment")); } else { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; console.log(chalk_1.default.red(`āŒ Error: ${errorMessage}`)); } } } //# sourceMappingURL=index.js.map