77 lines
2.0 KiB
JavaScript

import * as esbuild from "esbuild";
import { execSync } from "child_process";
import { cpSync, rmSync, mkdirSync, writeFileSync, readFileSync } from "fs";
// Clean dist
rmSync("dist", { recursive: true, force: true });
mkdirSync("dist/server", { recursive: true });
mkdirSync("dist/ui", { recursive: true });
const shared = {
bundle: true,
sourcemap: true,
minify: false,
};
// Build all formats in parallel
await Promise.all([
// Server ESM
esbuild.build({
...shared,
entryPoints: ["server/index.ts"],
outfile: "dist/server/index.js",
format: "esm",
platform: "node",
target: "node18",
external: ["@mcp-ui/server", "esbuild"],
}),
// Server CJS
esbuild.build({
...shared,
entryPoints: ["server/index.ts"],
outfile: "dist/server/index.cjs",
format: "cjs",
platform: "node",
target: "node18",
external: ["@mcp-ui/server", "esbuild"],
}),
// UI ESM
esbuild.build({
...shared,
entryPoints: ["ui/index.ts"],
outfile: "dist/ui/index.js",
format: "esm",
platform: "browser",
target: "es2020",
external: ["react", "react-dom"],
}),
// UI CJS
esbuild.build({
...shared,
entryPoints: ["ui/index.ts"],
outfile: "dist/ui/index.cjs",
format: "cjs",
platform: "browser",
target: "es2020",
external: ["react", "react-dom"],
}),
]);
console.log("✅ JS builds complete");
// Generate TypeScript declarations
execSync("tsc -p tsconfig.build.json", { stdio: "inherit" });
// Copy .d.ts to .d.cts for CJS compatibility
cpSync("dist/server/index.d.ts", "dist/server/index.d.cts");
cpSync("dist/ui/index.d.ts", "dist/ui/index.d.cts");
// Remove internal declaration files (bundle, html)
rmSync("dist/server/bundle.d.ts", { force: true });
rmSync("dist/server/bundle.d.ts.map", { force: true });
rmSync("dist/server/html.d.ts", { force: true });
rmSync("dist/server/html.d.ts.map", { force: true });
console.log("✅ Type declarations complete");
console.log("✅ Build complete");