import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { spawnSync } from "node:child_process"; import { fileURLToPath } from "node:url"; import { resolvePrimeRoot } from "./prime-root.mjs"; const projectRoot = fileURLToPath(new URL("..", import.meta.url)); const primeRoot = resolvePrimeRoot(); const config = JSON.parse(readFileSync(join(projectRoot, "tsconfig.json"), "utf8")); config.compilerOptions.baseUrl = projectRoot; config.compilerOptions.typeRoots = [join(projectRoot, "node_modules/@types")]; config.compilerOptions.paths = { "@earendil-works/pi-coding-agent": [join(primeRoot, "dist/index.d.ts")], "@earendil-works/pi-agent-core": [ join(primeRoot, "node_modules/@earendil-works/pi-agent-core/dist/index.d.ts"), ], "@earendil-works/pi-ai": [ join(primeRoot, "node_modules/@earendil-works/pi-ai/dist/index.d.ts"), ], }; config.include = [join(projectRoot, "index.ts"), join(projectRoot, "worker.ts")]; const temporaryDirectory = mkdtempSync(join(tmpdir(), "prime-snapcompact-tsconfig-")); const configPath = join(temporaryDirectory, "tsconfig.json"); writeFileSync(configPath, JSON.stringify(config)); try { const result = spawnSync( process.execPath, [join(projectRoot, "node_modules/typescript/bin/tsc"), "--project", configPath], { stdio: "inherit" }, ); if (result.error) throw result.error; process.exitCode = result.status ?? 1; } finally { rmSync(temporaryDirectory, { recursive: true, force: true }); }