mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-28 10:35:21 +02:00
Compare commits
4 Commits
v0.26.3
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e416aa6a10 | ||
|
|
222bcba91b | ||
|
|
34d86030e7 | ||
|
|
19b3dde034 |
@@ -9,12 +9,19 @@ export { ExecError } from "./ExecError";
|
|||||||
|
|
||||||
const execAsyncBase = util.promisify(exec);
|
const execAsyncBase = util.promisify(exec);
|
||||||
|
|
||||||
|
// Set maxBuffer to 100MB to handle large backup restore operations
|
||||||
|
// Default is 1MB which can cause "maxBuffer length exceeded" errors
|
||||||
|
const MAX_EXEC_BUFFER_SIZE = 100 * 1024 * 1024;
|
||||||
|
|
||||||
export const execAsync = async (
|
export const execAsync = async (
|
||||||
command: string,
|
command: string,
|
||||||
options?: { cwd?: string; env?: NodeJS.ProcessEnv; shell?: string },
|
options?: ExecOptions & { shell?: string },
|
||||||
): Promise<{ stdout: string; stderr: string }> => {
|
): Promise<{ stdout: string; stderr: string }> => {
|
||||||
try {
|
try {
|
||||||
const result = await execAsyncBase(command, options);
|
const result = await execAsyncBase(command, {
|
||||||
|
...options,
|
||||||
|
maxBuffer: options?.maxBuffer ?? MAX_EXEC_BUFFER_SIZE,
|
||||||
|
});
|
||||||
return {
|
return {
|
||||||
stdout: result.stdout.toString(),
|
stdout: result.stdout.toString(),
|
||||||
stderr: result.stderr.toString(),
|
stderr: result.stderr.toString(),
|
||||||
@@ -43,6 +50,7 @@ export const execAsync = async (
|
|||||||
interface ExecOptions {
|
interface ExecOptions {
|
||||||
cwd?: string;
|
cwd?: string;
|
||||||
env?: NodeJS.ProcessEnv;
|
env?: NodeJS.ProcessEnv;
|
||||||
|
maxBuffer?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const execAsyncStream = (
|
export const execAsyncStream = (
|
||||||
@@ -54,22 +62,26 @@ export const execAsyncStream = (
|
|||||||
let stdoutComplete = "";
|
let stdoutComplete = "";
|
||||||
let stderrComplete = "";
|
let stderrComplete = "";
|
||||||
|
|
||||||
const childProcess = exec(command, options, (error) => {
|
const childProcess = exec(
|
||||||
if (error) {
|
command,
|
||||||
reject(
|
{ ...options, maxBuffer: options?.maxBuffer ?? MAX_EXEC_BUFFER_SIZE },
|
||||||
new ExecError(`Command execution failed: ${error.message}`, {
|
(error) => {
|
||||||
command,
|
if (error) {
|
||||||
stdout: stdoutComplete,
|
reject(
|
||||||
stderr: stderrComplete,
|
new ExecError(`Command execution failed: ${error.message}`, {
|
||||||
// @ts-ignore
|
command,
|
||||||
exitCode: error.code,
|
stdout: stdoutComplete,
|
||||||
originalError: error,
|
stderr: stderrComplete,
|
||||||
}),
|
// @ts-ignore
|
||||||
);
|
exitCode: error.code,
|
||||||
return;
|
originalError: error,
|
||||||
}
|
}),
|
||||||
resolve({ stdout: stdoutComplete, stderr: stderrComplete });
|
);
|
||||||
});
|
return;
|
||||||
|
}
|
||||||
|
resolve({ stdout: stdoutComplete, stderr: stderrComplete });
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
childProcess.stdout?.on("data", (data: Buffer | string) => {
|
childProcess.stdout?.on("data", (data: Buffer | string) => {
|
||||||
const stringData = data.toString();
|
const stringData = data.toString();
|
||||||
|
|||||||
Reference in New Issue
Block a user