Skip to content

Commit 44b074f

Browse files
committed
fix spawn process
1 parent 21d70b6 commit 44b074f

2 files changed

Lines changed: 25 additions & 8 deletions

File tree

dist/index.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2797,13 +2797,21 @@ const logError = (err, output) => {
27972797
return err;
27982798
};
27992799
const spawnProcess = async (command, args, cwd) => {
2800-
const childProcess = external_child_process_namespaceObject.spawn(command, args, { stdio: 'inherit', cwd });
2800+
const childProcess = external_child_process_namespaceObject.spawn(command, args, { cwd });
28012801
return new Promise((resolve, reject) => {
28022802
const output = [];
2803-
childProcess.stdout?.on('data', (d) => output.push(d.toString()));
2804-
childProcess.stderr?.on('data', (d) => output.push(d.toString()));
2803+
const r1 = childProcess.stdout?.on('data', (d) => output.push(d.toString()));
2804+
const r2 = childProcess.stderr?.on('data', (d) => output.push(d.toString()));
2805+
const p1 = new Promise((resolve) => (r1 ? r1.once('close', resolve) : resolve()));
2806+
const p2 = new Promise((resolve) => (r2 ? r2.once('close', resolve) : resolve()));
28052807
childProcess.once('error', (err) => reject(logError(err, output)));
2806-
childProcess.once('exit', (code) => (code === 0 ? resolve(output.join('')) : reject(logError(code, output))));
2808+
childProcess.once('exit', async (code) => {
2809+
r1?.removeAllListeners('data');
2810+
r2?.removeAllListeners('data');
2811+
await p1;
2812+
await p2;
2813+
return code === 0 ? resolve(output.join('')) : reject(logError(code, output));
2814+
});
28072815
});
28082816
};
28092817

src/spawnProcess.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,22 @@ const logError = (err: unknown, output: string[]) => {
66
}
77

88
export const spawnProcess = async (command: string, args: string[], cwd: string) => {
9-
const childProcess = child_process.spawn(command, args, { stdio: 'inherit', cwd })
9+
const childProcess = child_process.spawn(command, args, { cwd })
1010
return new Promise<string>((resolve, reject) => {
1111
const output: string[] = []
12-
childProcess.stdout?.on('data', (d) => output.push(d.toString()))
13-
childProcess.stderr?.on('data', (d) => output.push(d.toString()))
12+
const r1 = childProcess.stdout?.on('data', (d) => output.push(d.toString()))
13+
const r2 = childProcess.stderr?.on('data', (d) => output.push(d.toString()))
14+
15+
const p1 = new Promise<void>((resolve) => (r1 ? r1.once('close', resolve) : resolve()))
16+
const p2 = new Promise<void>((resolve) => (r2 ? r2.once('close', resolve) : resolve()))
1417

1518
childProcess.once('error', (err) => reject(logError(err, output)))
16-
childProcess.once('exit', (code: unknown) => (code === 0 ? resolve(output.join('')) : reject(logError(code, output))))
19+
childProcess.once('exit', async (code: unknown) => {
20+
r1?.removeAllListeners('data')
21+
r2?.removeAllListeners('data')
22+
await p1
23+
await p2
24+
return code === 0 ? resolve(output.join('')) : reject(logError(code, output))
25+
})
1726
})
1827
}

0 commit comments

Comments
 (0)