{"version":3,"sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;AAEA,SAAS,eAAe;AACxB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,WAAW;AALlB;AAAA;AAOA,QAAM,UAAU,IAAI,QAAQ;AAE5B,QAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCvB,aAAe,uBAEb;AAAA;AACA,cAAM,MAAM,QAAQ,IAAI;AACxB,YAAI;AAEF,gBAAM,QAAQ,MAAM,GAAG,QAAQ,GAAG;AAElC,cAAI,MAAM,SAAS,WAAW;AAAG,mBAAO;AACxC,cAAI,MAAM,SAAS,gBAAgB;AAAG,mBAAO;AAC7C,cAAI,MAAM,SAAS,WAAW;AAAG,mBAAO;AACxC,cAAI,MAAM,SAAS,mBAAmB;AAAG,mBAAO;AAGhD,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAEA,aAAe,oBACb,gBACA;AAAA;AACA,cAAM,YAAY,MAAM,OAAO,eAAoB,GAAG;AACtD,cAAM,eAAe,CAAC,eAAe,KAAK;AAE1C,cAAM,WAAW;AAAA,UACf,KAAK,eAAe,aAAa,KAAK,GAAG,CAAC;AAAA,UAC1C,MAAM,YAAY,aAAa,KAAK,GAAG,CAAC;AAAA,UACxC,MAAM,YAAY,aAAa,KAAK,GAAG,CAAC;AAAA,UACxC,KAAK,WAAW,aAAa,KAAK,GAAG,CAAC;AAAA,QACxC;AAEA,YAAI;AACF,kBAAQ;AAAA,YACN,MAAM,KAAK;AAAA,gCAAmC,cAAc,KAAK;AAAA,UACnE;AACA,mBAAS,SAAS,cAAc,GAAG,EAAE,OAAO,UAAU,CAAC;AACvD,kBAAQ,IAAI,MAAM,MAAM,+CAA0C,CAAC;AAAA,QACrE,SAAS,OAAO;AACd,kBAAQ;AAAA,YACN,MAAM;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AACA,kBAAQ,IAAI,MAAM,OAAO;AAAA,EAAK,SAAS,cAAc,CAAC,EAAE,CAAC;AAAA,QAC3D;AAAA,MACF;AAAA;AAEA,aAAe,OAAO;AAAA;AA7FtB;AA8FE,YAAI;AAEF,gBAAM,cAAc,KAAK;AAAA,YACvB,MAAM,GAAG,SAAS,KAAK,KAAK,QAAQ,IAAI,GAAG,cAAc,GAAG,OAAO;AAAA,UACrE;AAEA,cAAI,GAAC,iBAAY,iBAAZ,mBAA0B,SAAQ,GAAC,iBAAY,oBAAZ,mBAA6B,OAAM;AACzE,oBAAQ;AAAA,cACN,MAAM,IAAI,sDAAiD;AAAA,YAC7D;AACA,oBAAQ,KAAK,CAAC;AAAA,UAChB;AAGA,gBAAM,YAAY,KAAK,KAAK,QAAQ,IAAI,GAAG,OAAO,OAAO,aAAa;AACtE,gBAAM,GAAG,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAG7C,gBAAM,gBAAgB,KAAK,KAAK,WAAW,UAAU;AACrD,gBAAM,GAAG,UAAU,eAAe,cAAc;AAEhD,kBAAQ,IAAI,MAAM,MAAM,gDAA2C,CAAC;AAGpE,gBAAM,iBAAiB,MAAM,qBAAqB;AAClD,gBAAM,oBAAoB,cAAc;AAAA,QAC1C,SAAS,OAAO;AACd,kBAAQ,MAAM,MAAM,IAAI,mCAAmC,GAAG,KAAK;AACnE,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAAA,MACF;AAAA;AAEA,YACG,KAAK,aAAa,EAClB,YAAY,sDAAsD,EAClE,OAAO,IAAI;AAEd,YAAQ,MAAM;AAAA;AAAA","sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\n\nconst program = new Command();\n\nconst ROUTE_TEMPLATE = `import { createMcpHandler } from 'mcp-handler';\nimport { z } from 'zod';\n\nconst handler = createMcpHandler(\n  server => {\n    server.tool(\n      'roll_dice',\n      'Rolls an N-sided die',\n      { \n        sides: z.number().int().min(2)\n      },\n      async ({ sides }) => {\n        const value = 1 + Math.floor(Math.random() * sides);\n        return {\n          content: [{ type: 'text', text: \\`🎲 You rolled a \\${value}!\\` }],\n        };\n      }\n    );\n  },\n  {\n    // Optional server options\n  },\n  {\n    // Optional redis config\n    redisUrl: process.env.REDIS_URL,\n    // You need these endpoints\n    basePath: '/api',\n    maxDuration: 60,\n    verboseLogs: true,\n  }\n);\n\nexport { handler as GET, handler as POST };\n`;\n\nasync function detectPackageManager(): Promise<\n  \"npm\" | \"pnpm\" | \"yarn\" | \"bun\"\n> {\n  const cwd = process.cwd();\n  try {\n    // Check for lock files in order of preference\n    const files = await fs.readdir(cwd);\n\n    if (files.includes(\"bun.lockb\")) return \"bun\";\n    if (files.includes(\"pnpm-lock.yaml\")) return \"pnpm\";\n    if (files.includes(\"yarn.lock\")) return \"yarn\";\n    if (files.includes(\"package-lock.json\")) return \"npm\";\n\n    // Fallback to npm if no lock file found\n    return \"npm\";\n  } catch (error) {\n    return \"npm\";\n  }\n}\n\nasync function installDependencies(\n  packageManager: \"npm\" | \"pnpm\" | \"yarn\" | \"bun\"\n) {\n  const execSync = (await import(\"node:child_process\")).execSync;\n  const dependencies = [\"mcp-handler\", \"zod\"];\n\n  const commands = {\n    npm: `npm install ${dependencies.join(\" \")}`,\n    pnpm: `pnpm add ${dependencies.join(\" \")}`,\n    yarn: `yarn add ${dependencies.join(\" \")}`,\n    bun: `bun add ${dependencies.join(\" \")}`,\n  };\n\n  try {\n    console.log(\n      chalk.blue(`\\nInstalling dependencies using ${packageManager}...`)\n    );\n    execSync(commands[packageManager], { stdio: \"inherit\" });\n    console.log(chalk.green(\"\\n✅ Dependencies installed successfully!\"));\n  } catch (error) {\n    console.error(\n      chalk.red(\n        \"\\n❌ Failed to install dependencies. You can install them manually:\"\n      )\n    );\n    console.log(chalk.yellow(`\\n${commands[packageManager]}`));\n  }\n}\n\nasync function init() {\n  try {\n    // Check if we're in a Next.js project\n    const packageJson = JSON.parse(\n      await fs.readFile(path.join(process.cwd(), \"package.json\"), \"utf-8\")\n    );\n\n    if (!packageJson.dependencies?.next && !packageJson.devDependencies?.next) {\n      console.error(\n        chalk.red(\"❌ This command must be run in a Next.js project\")\n      );\n      process.exit(1);\n    }\n\n    // Create the app/api/[transport] directory structure\n    const routePath = path.join(process.cwd(), \"app\", \"api\", \"[transport]\");\n    await fs.mkdir(routePath, { recursive: true });\n\n    // Create the route.ts file\n    const routeFilePath = path.join(routePath, \"route.ts\");\n    await fs.writeFile(routeFilePath, ROUTE_TEMPLATE);\n\n    console.log(chalk.green(\"✅ Successfully created MCP route handler!\"));\n\n    // Detect and use the appropriate package manager\n    const packageManager = await detectPackageManager();\n    await installDependencies(packageManager);\n  } catch (error) {\n    console.error(chalk.red(\"Error creating MCP route handler:\"), error);\n    process.exit(1);\n  }\n}\n\nprogram\n  .name(\"mcp-handler\")\n  .description(\"Initialize MCP route handler in your Next.js project\")\n  .action(init);\n\nprogram.parse();\n"]}