export async function checkFileExists(filePath: string): Promise { try { await Deno.lstat(filePath); return true; } catch (error) { if (error instanceof Deno.errors.NotFound) { return false; } else { throw error; } } } async function checkExecutableExists(name: string): Promise { try { const command = new Deno.Command("which", { args: [name] }); const { success } = await command.output(); return success; } catch { return false; } } export async function createSubtrTmpDirectories(): Promise { const dirs = [ "/tmp/substr/img/", ]; for (const path of dirs) { await Deno.mkdir(path, { recursive: true }); } } export async function runCommand(cmd: string, args: string[]) { const command = new Deno.Command(cmd, { args }); const { code, success, stdout, stderr } = await command.output(); if (code === 1) { console.log(new TextDecoder().decode(stdout)); console.log(new TextDecoder().decode(stderr)); } return { success, stdout, stderr }; } export async function getImageMagickCommand(): Promise { if (await checkExecutableExists("magick")) { return "magick"; } else if (await checkExecutableExists("convert")) { return "convert"; } else { return undefined; } }