in src/helpers/command.ts [148:207]
export function tryExecuteCommandInForkAsync(
workingDirectory: string | undefined,
writeToOutputChannel: boolean,
modulePath: string,
...args: string[]
): ICommandExecute {
let cmdOutput: string = '';
let cmdOutputIncludingStderr: string = '';
const messages: Array<string | object> = [];
const batches: {[key: string]: string[]} = {};
const childProcess = forkProcess(workingDirectory, modulePath, args);
const result = new Promise((resolve: (res: any) => void, reject: (error: Error) => void): void => {
childProcess.stdout.on('data', (data: string | Buffer) => {
data = data.toString();
cmdOutput = cmdOutput.concat(data);
cmdOutputIncludingStderr = cmdOutputIncludingStderr.concat(data);
if (writeToOutputChannel) {
Output.output(Constants.outputChannel.executeCommand, data);
}
});
childProcess.stderr.on('data', (data: string | Buffer) => {
data = data.toString();
cmdOutputIncludingStderr = cmdOutputIncludingStderr.concat(data);
if (writeToOutputChannel) {
Output.output(Constants.outputChannel.executeCommand, data);
}
});
childProcess.on('message', (message: IForkMessage) => {
if (message.batch) {
batches[message.command] = batches[message.command] || [];
batches[message.command][message.batch.index] = message.batch.message;
if (message.batch.done) {
messages.push({command: message.command, message: batches[message.command].join('')});
}
} else {
messages.push(message);
}
const data = JSON.stringify(message);
cmdOutput = cmdOutput.concat(data);
cmdOutputIncludingStderr = cmdOutputIncludingStderr.concat(data);
if (writeToOutputChannel) {
Output.output(Constants.outputChannel.executeCommand, data);
}
});
childProcess.on('error', reject);
childProcess.on('close', (code: number) => {
resolve({ cmdOutput, cmdOutputIncludingStderr, code, messages });
});
});
return { childProcess, result };
}