|
| 1 | +import { cpSync, mkdirSync, existsSync, writeFileSync } from "fs"; |
| 2 | +import { resolve, join, extname } from "path"; |
| 3 | + |
| 4 | +const mcpRoot = resolve(__dirname, "..", "packages", "igniteui-mcp", "igniteui-doc-mcp"); |
| 5 | +const dest = resolve(__dirname, "..", "packages", "cli", "mcp"); |
| 6 | + |
| 7 | +// Copy compiled server (dist/) — only .js, .d.ts, and .db files |
| 8 | +const distSrc = join(mcpRoot, "dist"); |
| 9 | +const distDest = join(dest, "dist"); |
| 10 | + |
| 11 | +if (!existsSync(distSrc)) { |
| 12 | + console.error(`MCP dist/ not found at ${distSrc}. Build the MCP server first:`); |
| 13 | + console.error(" cd packages/igniteui-mcp/igniteui-doc-mcp && npm run build"); |
| 14 | + process.exit(1); |
| 15 | +} |
| 16 | + |
| 17 | +mkdirSync(distDest, { recursive: true }); |
| 18 | +cpSync(distSrc, distDest, { |
| 19 | + recursive: true, |
| 20 | + filter: (source) => { |
| 21 | + // Exclude intermediate processing artifacts |
| 22 | + if (source.includes("docs_processing") || |
| 23 | + source.includes("docs_prepeared") || |
| 24 | + source.includes("docs_final") || |
| 25 | + source.includes("diff-manifest")) { |
| 26 | + return false; |
| 27 | + } |
| 28 | + // Allow directories (needed for recursive copy) |
| 29 | + const ext = extname(source); |
| 30 | + if (!ext) return true; |
| 31 | + // Only include .js, .d.ts, and .db files |
| 32 | + return source.endsWith(".d.ts") || ext === ".js" || ext === ".db"; |
| 33 | + } |
| 34 | +}); |
| 35 | +console.log(" Copied dist/ (compiled MCP server + SQLite DB)"); |
| 36 | + |
| 37 | +// Ensure ESM module resolution works inside the CJS CLI package |
| 38 | +writeFileSync(join(distDest, "package.json"), JSON.stringify({ type: "module" }, null, 2) + "\n"); |
| 39 | +console.log(" Created dist/package.json (ESM marker)"); |
| 40 | + |
| 41 | +// Copy API documentation (docs/) for get_api_reference and search_api tools |
| 42 | +const docsToCopy = [ |
| 43 | + { src: "docs/angular/api", label: "Angular API docs" }, |
| 44 | + { src: "docs/react", label: "React API docs" }, |
| 45 | + { src: "docs/webcomponents/api", label: "Web Components API docs" }, |
| 46 | +]; |
| 47 | + |
| 48 | +for (const doc of docsToCopy) { |
| 49 | + const docSrc = join(mcpRoot, doc.src); |
| 50 | + const docDest = join(dest, doc.src); |
| 51 | + if (existsSync(docSrc)) { |
| 52 | + mkdirSync(docDest, { recursive: true }); |
| 53 | + cpSync(docSrc, docDest, { recursive: true }); |
| 54 | + console.log(` Copied ${doc.src} (${doc.label})`); |
| 55 | + } else { |
| 56 | + console.warn(` ⚠ Skipped ${doc.src} — not found (${doc.label})`); |
| 57 | + } |
| 58 | +} |
| 59 | + |
| 60 | +console.log("\nBundled MCP server into packages/cli/mcp/"); |
0 commit comments