From 58fa1ab9be7ee8fd4a8e96865121a54d613978cc Mon Sep 17 00:00:00 2001 From: Aylur Date: Sat, 25 May 2024 14:44:50 +0200 Subject: separate node and gjs into its own package --- node/src/process.ts | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 node/src/process.ts (limited to 'node/src/process.ts') diff --git a/node/src/process.ts b/node/src/process.ts new file mode 100644 index 0000000..604e142 --- /dev/null +++ b/node/src/process.ts @@ -0,0 +1,68 @@ +import { Astal } from "./imports.js" + +type Process = ReturnType + +type Args = { + cmd: string | string[], + out?: (stdout: string) => Out, + err?: (stderr: string) => Err, +} + +export function args(argsOrCmd: Args | string | string[], onOut: O, onErr: E) { + const params = Array.isArray(argsOrCmd) || typeof argsOrCmd === "string" + return { + cmd: params ? argsOrCmd : argsOrCmd.cmd, + err: params ? onErr : argsOrCmd.err || onErr, + out: params ? onOut : argsOrCmd.out || onOut, + } +} + +export function subprocess(args: Args): Process +export function subprocess( + cmd: string | string[], + onOut?: (stdout: string) => void, + onErr?: (stderr: string) => void, +): Process +export function subprocess( + argsOrCmd: Args | string | string[], + onOut: (stdout: string) => void = console.log, + onErr: (stderr: string) => void = console.error, +) { + const { cmd, err, out } = args(argsOrCmd, onOut, onErr) + const proc = Array.isArray(cmd) + ? Astal.Process.subprocessv(cmd) + : Astal.Process.subprocess(cmd) + + proc.connect("stdout", (_: any, stdout: string) => out(stdout)) + proc.connect("stderr", (_: any, stderr: string) => err(stderr)) + return proc +} + +export function exec( + args: Args +): Out | Err +export function exec( + cmd: string | string[], + onOut?: (stdout: string) => Out, + onErr?: (stderr: string) => Err, +): Out | Err +export function exec( + argsOrCmd: Args | string | string[], + onOut: (stdout: string) => Out = out => out as Out, + onErr: (stderr: string) => Err = out => out as Err, +): Out | Err { + const { cmd, err, out } = args(argsOrCmd, onOut, onErr) + return Array.isArray(cmd) + ? out(Astal.Process.execv(cmd)!) as Out + : err(Astal.Process.exec(cmd)!) as Err +} + +export function execAsync(cmd: string | string[]): Promise { + const proc = Array.isArray(cmd) + ? Astal.Process.execAsyncv(cmd) + : Astal.Process.execAsync(cmd) + return new Promise((resolve, reject) => { + proc.connect("stdout", (_: any, out: string) => resolve(out)) + proc.connect("stderr", (_: any, err: string) => reject(err)) + }) +} -- cgit v1.2.3