feat: replace exec with execFile

This commit is contained in:
C4illin 2025-03-06 18:16:51 +01:00
parent c1b75a13fd
commit 9263d17609
10 changed files with 869 additions and 855 deletions

View file

@ -1,4 +1,4 @@
import { exec } from "node:child_process";
import { execFile } from "node:child_process";
export const properties = {
from: {
@ -119,10 +119,8 @@ export async function convert(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
options?: unknown,
): Promise<string> {
const command = `assimp export "${filePath}" "${targetPath}"`;
return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
execFile("assimp", ["export", filePath, targetPath], (error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);
}

View file

@ -1,4 +1,4 @@
import { exec } from "node:child_process";
import { execFile } from "node:child_process";
export const properties = {
from: {
@ -64,10 +64,8 @@ export async function convert(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
options?: unknown,
): Promise<string> {
const command = `ebook-convert "${filePath}" "${targetPath}"`;
return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
execFile("ebook-convert", [filePath, targetPath], (error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);
}

View file

@ -1,4 +1,4 @@
import { exec } from "node:child_process";
import { execFile } from "node:child_process";
// This could be done dynamically by running `ffmpeg -formats` and parsing the output
export const properties = {
@ -691,19 +691,28 @@ export async function convert(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
options?: unknown,
): Promise<string> {
let extra = "";
let extraArgs: string[] = [];
let message = "Done";
if (convertTo === "ico") {
// make sure image is 256x256 or smaller
extra = `-filter:v "scale='min(256,iw)':min'(256,ih)':force_original_aspect_ratio=decrease"`;
extraArgs = ['-filter:v', "scale='min(256,iw)':min'(256,ih)':force_original_aspect_ratio=decrease"];
message = "Done: resized to 256x256";
}
const command = `ffmpeg ${process.env.FFMPEG_ARGS || ""} -i "${filePath}" ${extra} "${targetPath}"`;
// Parse FFMPEG_ARGS environment variable into array
const ffmpegArgs = process.env.FFMPEG_ARGS ? process.env.FFMPEG_ARGS.split(/\s+/) : [];
// Build arguments array
const args = [
...ffmpegArgs,
"-i", filePath,
...extraArgs,
targetPath
];
return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
execFile("ffmpeg", args, (error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);
}

View file

@ -1,4 +1,4 @@
import { exec } from "node:child_process";
import { execFile } from "node:child_process";
export const properties = {
from: {
@ -317,8 +317,9 @@ export function convert(
options?: unknown,
): Promise<string> {
return new Promise((resolve, reject) => {
exec(
`gm convert "${filePath}" "${targetPath}"`,
execFile(
"gm",
["convert", filePath, targetPath],
(error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);

View file

@ -1,50 +1,45 @@
import { exec } from "node:child_process";
import { execFile } from "node:child_process";
export const properties = {
from: {
images: [
"svg",
"pdf",
"eps",
"ps",
"wmf",
"emf",
"png"
]
},
to: {
images: [
"dxf",
"emf",
"eps",
"fxg",
"gpl",
"hpgl",
"html",
"odg",
"pdf",
"png",
"pov",
"ps",
"sif",
"svg",
"svgz",
"tex",
"wmf",
]
},
};
from: {
images: ["svg", "pdf", "eps", "ps", "wmf", "emf", "png"],
},
to: {
images: [
"dxf",
"emf",
"eps",
"fxg",
"gpl",
"hpgl",
"html",
"odg",
"pdf",
"png",
"pov",
"ps",
"sif",
"svg",
"svgz",
"tex",
"wmf",
],
},
};
export function convert(
filePath: string,
fileType: string,
convertTo: string,
targetPath: string,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
options?: unknown,
): Promise<string> {
return new Promise((resolve, reject) => {
exec(`inkscape "${filePath}" -o "${targetPath}"`, (error, stdout, stderr) => {
export function convert(
filePath: string,
fileType: string,
convertTo: string,
targetPath: string,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
options?: unknown,
): Promise<string> {
return new Promise((resolve, reject) => {
execFile(
"inkscape",
[filePath, "-o", targetPath],
(error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);
}
@ -58,7 +53,7 @@ export const properties = {
}
resolve("Done");
});
});
}
},
);
});
}

View file

@ -1,4 +1,4 @@
import { exec } from "node:child_process";
import { execFile } from "node:child_process";
// declare possible conversions
export const properties = {
@ -52,7 +52,7 @@ export function convert(
}
return new Promise((resolve, reject) => {
exec(`${tool} "${filePath}" "${targetPath}"`, (error, stdout, stderr) => {
execFile(tool, [filePath, targetPath], (error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);
}

View file

@ -1,4 +1,4 @@
import { exec } from "node:child_process";
import { execFile } from "node:child_process";
export const properties = {
from: {
@ -129,28 +129,34 @@ export function convert(
): Promise<string> {
// set xelatex here
const xelatex = ["pdf", "latex"];
let option = "";
// Build arguments array
const args: string[] = [];
if (xelatex.includes(convertTo)) {
option = "--pdf-engine=xelatex";
args.push("--pdf-engine=xelatex");
}
args.push(filePath);
args.push("-f", fileType);
args.push("-t", convertTo);
args.push("-o", targetPath);
return new Promise((resolve, reject) => {
exec(
`pandoc ${option} "${filePath}" -f ${fileType} -t ${convertTo} -o "${targetPath}"`,
(error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);
}
execFile("pandoc", args, (error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);
}
if (stdout) {
console.log(`stdout: ${stdout}`);
}
if (stdout) {
console.log(`stdout: ${stdout}`);
}
if (stderr) {
console.error(`stderr: ${stderr}`);
}
if (stderr) {
console.error(`stderr: ${stderr}`);
}
resolve("Done");
},
);
resolve("Done");
});
});
}

View file

@ -1,4 +1,4 @@
import { exec } from "node:child_process";
import { execFile } from "node:child_process";
export const properties = {
from: {
@ -18,7 +18,7 @@ export function convert(
options?: unknown,
): Promise<string> {
return new Promise((resolve, reject) => {
exec(`resvg "${filePath}" "${targetPath}"`, (error, stdout, stderr) => {
execFile("resvg", [filePath, targetPath], (error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);
}

View file

@ -1,5 +1,4 @@
import { exec } from "node:child_process";
import { execFile } from "node:child_process";
// declare possible conversions
export const properties = {
@ -120,8 +119,9 @@ export function convert(
}
return new Promise((resolve, reject) => {
exec(
`vips ${action} "${filePath}" "${targetPath}"`,
execFile(
"vips",
[action, filePath, targetPath],
(error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);

View file

@ -1,4 +1,4 @@
import { exec } from "node:child_process";
import { execFile } from "node:child_process";
export const properties = {
from: {
@ -24,8 +24,15 @@ export function convert(
.slice(0, -1)
.join("/")
.replace("./", "");
exec(
`latexmk -xelatex -interaction=nonstopmode -output-directory="${outputPath}" "${filePath}"`,
execFile(
"latexmk",
[
"-xelatex",
"-interaction=nonstopmode",
`-output-directory=${outputPath}`,
filePath,
],
(error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);