mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
64 lines
1.3 KiB
JavaScript
Executable File
64 lines
1.3 KiB
JavaScript
Executable File
import ChildProcess from "node:child_process"
|
|
import createServiceLogTransformer from "./createServiceLogTransformer"
|
|
|
|
import Vars from "../vars"
|
|
|
|
export default async ({
|
|
id,
|
|
service,
|
|
path,
|
|
cwd,
|
|
onClose,
|
|
onError,
|
|
onIPCData,
|
|
}) => {
|
|
const instanceEnv = {
|
|
...process.env,
|
|
lb_service_id: service.id,
|
|
lb_service_path: service.path,
|
|
lb_service_version: service.version,
|
|
lb_service_cwd: service.cwd,
|
|
lb_service: true,
|
|
}
|
|
|
|
let instance = ChildProcess.fork(Vars.bootloaderBin, [path], {
|
|
detached: false,
|
|
silent: true,
|
|
cwd: cwd,
|
|
env: instanceEnv,
|
|
})
|
|
|
|
instance.logs = {
|
|
stdout: createServiceLogTransformer({ id }),
|
|
stderr: createServiceLogTransformer({ id, color: "bgRed" }),
|
|
attach: (withBuffer = false) => {
|
|
instance.logs.stdout.pipe(process.stdout)
|
|
instance.logs.stderr.pipe(process.stderr)
|
|
},
|
|
detach: (withBuffer = false) => {
|
|
instance.logs.stdout.unpipe(process.stdout)
|
|
instance.logs.stderr.unpipe(process.stderr)
|
|
},
|
|
}
|
|
|
|
// push to buffer history
|
|
instance.stdout.pipe(instance.logs.stdout)
|
|
instance.stderr.pipe(instance.logs.stderr)
|
|
|
|
instance.on("message", (data) => {
|
|
return onIPCData(id, data)
|
|
})
|
|
|
|
instance.on("error", (err) => {
|
|
return onError(id, err)
|
|
})
|
|
|
|
instance.on("close", (code) => {
|
|
return onClose(id, code)
|
|
})
|
|
|
|
global.ipcRouter.register({ id, instance })
|
|
|
|
return instance
|
|
}
|