50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import { spawn } from "bun"
|
|
|
|
console.log("\n\n----------------------------------")
|
|
console.log(`Node Environment: ${process.env.NODE_ENV || "development"}`)
|
|
console.log(`Bun Version: ${Bun.version}`)
|
|
console.log("----------------------------------\n\n")
|
|
|
|
const run = async (cmd: string[]) => {
|
|
// Filter gets rid of empty strings because it FREAKS Bun out
|
|
const proc = spawn(cmd.filter(Boolean), { stdout: "inherit", stderr: "inherit" })
|
|
const status = await proc.exited
|
|
|
|
const commandText = cmd.join(" ")
|
|
if (status !== 0) {
|
|
throw new Error(`Process "${commandText}" failed with exit code ${status}`)
|
|
} else {
|
|
console.log(`👋 Process ${commandText}(PID ${proc.pid}) exited with code ${status}`)
|
|
}
|
|
|
|
return proc
|
|
}
|
|
|
|
// Make sure we cleanup processes on exit
|
|
const prepareCleanup = () => {
|
|
const cleanup = async (signal: NodeJS.Signals | "exit") => {
|
|
process.on(signal, () => {
|
|
console.log(`🛑 Received ${signal}, cleaning up...`)
|
|
procs.forEach((proc) => proc.kill("SIGTERM"))
|
|
})
|
|
}
|
|
|
|
cleanup("SIGINT")
|
|
cleanup("SIGTERM")
|
|
cleanup("SIGHUP")
|
|
cleanup("exit")
|
|
}
|
|
|
|
let procs: Bun.Subprocess[] = []
|
|
try {
|
|
prepareCleanup()
|
|
const isDev = process.env.NODE_ENV !== "production"
|
|
const noElide = isDev ? "--elide-lines=0" : ""
|
|
|
|
procs = await Promise.all([run(["bun", "run", noElide, "--filter=@workshop/http", "start"])])
|
|
console.log("✅ All processes completed successfully")
|
|
} catch (error) {
|
|
console.error("❌ One or more processes failed:", error)
|
|
process.exit(1)
|
|
}
|