diff --git a/packages/process/package.json b/packages/process/package.json index 713d6dee59f44..0606b5165ef95 100644 --- a/packages/process/package.json +++ b/packages/process/package.json @@ -4,7 +4,7 @@ "description": "Theia process support.", "dependencies": { "@theia/core": "1.48.0", - "node-pty": "1.0.0", + "node-pty": "1.1.0-beta5", "string-argv": "^0.1.1", "tslib": "^2.6.2" }, diff --git a/packages/process/src/common/process-manager-types.ts b/packages/process/src/common/process-manager-types.ts index 01653487f8e6b..a8af2d0585a6a 100644 --- a/packages/process/src/common/process-manager-types.ts +++ b/packages/process/src/common/process-manager-types.ts @@ -42,6 +42,7 @@ export interface IProcessExitEvent { * Data emitted when a process has been successfully started. */ export interface IProcessStartEvent { + readonly pid?: number; } /** diff --git a/packages/process/src/node/process.ts b/packages/process/src/node/process.ts index 490ee09015563..a30e7b38dd81c 100644 --- a/packages/process/src/node/process.ts +++ b/packages/process/src/node/process.ts @@ -123,8 +123,8 @@ export abstract class Process implements ManagedProcess { return this.closeEmitter.event; } - protected emitOnStarted(): void { - this.startEmitter.fire({}); + protected emitOnStarted(event?: IProcessStartEvent): void { + this.startEmitter.fire(event ?? {}); } /** diff --git a/packages/process/src/node/terminal-process.spec.ts b/packages/process/src/node/terminal-process.spec.ts index 9e73207078d40..20424df10ac8b 100644 --- a/packages/process/src/node/terminal-process.spec.ts +++ b/packages/process/src/node/terminal-process.spec.ts @@ -38,14 +38,34 @@ describe('TerminalProcess', function (): void { this.timeout(20_000); it('test error on non existent path', async function (): Promise { - const error = await new Promise((resolve, reject) => { - const proc = terminalProcessFactory({ command: '/non-existent' }); - proc.onStart(reject); - proc.onError(resolve); - proc.onExit(reject); - }); + try { + const error = await new Promise((resolve, reject) => { + try { + const proc = terminalProcessFactory({ command: '/non-existent' }); + proc.onStart(e => { + console.log('onStart', e); + reject(e); + }); + proc.onError(e => { + console.log('onError', e); + resolve(e); + }); + proc.onExit(e => { + console.log('onExit', e); + reject(e); + }); + } catch (err) { + reject(err); + } + }); + + console.log('test error on non existent path', error); + expect(error.code).eq('ENOENT'); + } catch (err) { + console.log('test error on non existent path', err); + expect(err.code).eq('ENOENT'); + } - expect(error.code).eq('ENOENT'); }); it('test implicit .exe (Windows only)', async function (): Promise { diff --git a/yarn.lock b/yarn.lock index 900f027315dd8..c438266377b01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8594,10 +8594,10 @@ node-preload@^0.2.1: dependencies: process-on-spawn "^1.0.0" -node-pty@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-1.0.0.tgz#7daafc0aca1c4ca3de15c61330373af4af5861fd" - integrity sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA== +node-pty@1.1.0-beta5: + version "1.1.0-beta5" + resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-1.1.0-beta5.tgz#364386b7058a93070234064f13164ec1ef914993" + integrity sha512-j3QdgFHnLY0JWxztrvM3g67RaQLOGvytv+C6mFu0PqD+JILlzqfwuoyqRqVxdZZjoOTUXPfSRj1qPVCaCH+eOw== dependencies: nan "^2.17.0"