@opensumi/ide-terminal-next 2.17.9 → 2.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/component/tab.item.d.ts.map +1 -1
- package/lib/browser/component/tab.item.js +33 -12
- package/lib/browser/component/tab.item.js.map +1 -1
- package/lib/browser/component/tab.module.less +41 -12
- package/lib/browser/component/tab.view.d.ts.map +1 -1
- package/lib/browser/component/tab.view.js +25 -7
- package/lib/browser/component/tab.view.js.map +1 -1
- package/lib/browser/component/terminal.view.d.ts.map +1 -1
- package/lib/browser/component/terminal.view.js +25 -24
- package/lib/browser/component/terminal.view.js.map +1 -1
- package/lib/browser/contribution/terminal.menu.d.ts.map +1 -1
- package/lib/browser/contribution/terminal.menu.js +3 -4
- package/lib/browser/contribution/terminal.menu.js.map +1 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +0 -5
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/links/link-manager.d.ts.map +1 -1
- package/lib/browser/links/link-manager.js +11 -12
- package/lib/browser/links/link-manager.js.map +1 -1
- package/lib/browser/links/validated-local-link-provider.d.ts.map +1 -1
- package/lib/browser/links/validated-local-link-provider.js +1 -2
- package/lib/browser/links/validated-local-link-provider.js.map +1 -1
- package/lib/browser/terminal.addon.d.ts.map +1 -1
- package/lib/browser/terminal.addon.js +3 -1
- package/lib/browser/terminal.addon.js.map +1 -1
- package/lib/browser/terminal.api.d.ts +8 -7
- package/lib/browser/terminal.api.d.ts.map +1 -1
- package/lib/browser/terminal.api.js +31 -17
- package/lib/browser/terminal.api.js.map +1 -1
- package/lib/browser/terminal.client.d.ts +7 -4
- package/lib/browser/terminal.client.d.ts.map +1 -1
- package/lib/browser/terminal.client.js +21 -45
- package/lib/browser/terminal.client.js.map +1 -1
- package/lib/browser/terminal.context-menu.d.ts +2 -0
- package/lib/browser/terminal.context-menu.d.ts.map +1 -1
- package/lib/browser/terminal.context-menu.js +23 -4
- package/lib/browser/terminal.context-menu.js.map +1 -1
- package/lib/browser/terminal.controller.d.ts +16 -7
- package/lib/browser/terminal.controller.d.ts.map +1 -1
- package/lib/browser/terminal.controller.js +169 -33
- package/lib/browser/terminal.controller.js.map +1 -1
- package/lib/browser/terminal.input.js +2 -2
- package/lib/browser/terminal.input.js.map +1 -1
- package/lib/browser/terminal.internal.service.d.ts +6 -6
- package/lib/browser/terminal.internal.service.d.ts.map +1 -1
- package/lib/browser/terminal.internal.service.js +6 -25
- package/lib/browser/terminal.internal.service.js.map +1 -1
- package/lib/browser/terminal.profile.d.ts +18 -9
- package/lib/browser/terminal.profile.d.ts.map +1 -1
- package/lib/browser/terminal.profile.internal.d.ts.map +1 -1
- package/lib/browser/terminal.profile.internal.js +4 -6
- package/lib/browser/terminal.profile.internal.js.map +1 -1
- package/lib/browser/terminal.profile.js +59 -9
- package/lib/browser/terminal.profile.js.map +1 -1
- package/lib/browser/terminal.restore.d.ts.map +1 -1
- package/lib/browser/terminal.restore.js +3 -1
- package/lib/browser/terminal.restore.js.map +1 -1
- package/lib/browser/terminal.search.d.ts.map +1 -1
- package/lib/browser/terminal.search.js +6 -0
- package/lib/browser/terminal.search.js.map +1 -1
- package/lib/browser/terminal.service.d.ts +5 -17
- package/lib/browser/terminal.service.d.ts.map +1 -1
- package/lib/browser/terminal.service.js +6 -79
- package/lib/browser/terminal.service.js.map +1 -1
- package/lib/browser/terminal.view.d.ts +5 -3
- package/lib/browser/terminal.view.d.ts.map +1 -1
- package/lib/browser/terminal.view.js +9 -5
- package/lib/browser/terminal.view.js.map +1 -1
- package/lib/browser/xterm.d.ts +2 -1
- package/lib/browser/xterm.d.ts.map +1 -1
- package/lib/browser/xterm.js.map +1 -1
- package/lib/common/api.d.ts +3 -2
- package/lib/common/api.d.ts.map +1 -1
- package/lib/common/client.d.ts +19 -1
- package/lib/common/client.d.ts.map +1 -1
- package/lib/common/client.js +2 -1
- package/lib/common/client.js.map +1 -1
- package/lib/common/controller.d.ts +20 -5
- package/lib/common/controller.d.ts.map +1 -1
- package/lib/common/controller.js.map +1 -1
- package/lib/common/environmentVariable.d.ts +2 -3
- package/lib/common/environmentVariable.d.ts.map +1 -1
- package/lib/common/environmentVariable.js.map +1 -1
- package/lib/common/environmentVariableCollection.d.ts +2 -3
- package/lib/common/environmentVariableCollection.d.ts.map +1 -1
- package/lib/common/environmentVariableCollection.js +2 -2
- package/lib/common/environmentVariableCollection.js.map +1 -1
- package/lib/common/extension.d.ts +3 -0
- package/lib/common/extension.d.ts.map +1 -1
- package/lib/common/extension.js.map +1 -1
- package/lib/common/profile.d.ts +6 -9
- package/lib/common/profile.d.ts.map +1 -1
- package/lib/common/profile.js +1 -2
- package/lib/common/profile.js.map +1 -1
- package/lib/common/pty.d.ts +92 -11
- package/lib/common/pty.d.ts.map +1 -1
- package/lib/common/pty.js +40 -1
- package/lib/common/pty.js.map +1 -1
- package/lib/common/render.d.ts +5 -0
- package/lib/common/render.d.ts.map +1 -1
- package/lib/common/render.js.map +1 -1
- package/lib/common/resize.d.ts +2 -0
- package/lib/common/resize.d.ts.map +1 -1
- package/lib/common/service.d.ts +8 -11
- package/lib/common/service.d.ts.map +1 -1
- package/lib/common/service.js.map +1 -1
- package/lib/common/xterm.d.ts +16 -0
- package/lib/common/xterm.d.ts.map +1 -0
- package/lib/common/xterm.js +3 -0
- package/lib/common/xterm.js.map +1 -0
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +5 -0
- package/lib/node/index.js.map +1 -1
- package/lib/node/pty.d.ts +9 -5
- package/lib/node/pty.d.ts.map +1 -1
- package/lib/node/pty.js +13 -10
- package/lib/node/pty.js.map +1 -1
- package/lib/node/pty.manager.d.ts +52 -0
- package/lib/node/pty.manager.d.ts.map +1 -0
- package/lib/node/pty.manager.js +149 -0
- package/lib/node/pty.manager.js.map +1 -0
- package/lib/node/pty.manager.remote.d.ts +10 -0
- package/lib/node/pty.manager.remote.d.ts.map +1 -0
- package/lib/node/pty.manager.remote.js +92 -0
- package/lib/node/pty.manager.remote.js.map +1 -0
- package/lib/node/pty.proxy.d.ts +45 -0
- package/lib/node/pty.proxy.d.ts.map +1 -0
- package/lib/node/pty.proxy.js +255 -0
- package/lib/node/pty.proxy.js.map +1 -0
- package/lib/node/pty.proxy.remote.exec.d.ts +2 -0
- package/lib/node/pty.proxy.remote.exec.d.ts.map +1 -0
- package/lib/node/pty.proxy.remote.exec.js +7 -0
- package/lib/node/pty.proxy.remote.exec.js.map +1 -0
- package/lib/node/shell.d.ts +1 -1
- package/lib/node/shell.d.ts.map +1 -1
- package/lib/node/shell.js +14 -15
- package/lib/node/shell.js.map +1 -1
- package/lib/node/terminal.profile.service.d.ts.map +1 -1
- package/lib/node/terminal.profile.service.js +4 -6
- package/lib/node/terminal.profile.service.js.map +1 -1
- package/lib/node/terminal.service.client.d.ts +3 -8
- package/lib/node/terminal.service.client.d.ts.map +1 -1
- package/lib/node/terminal.service.client.js +8 -39
- package/lib/node/terminal.service.client.js.map +1 -1
- package/lib/node/terminal.service.d.ts +3 -2
- package/lib/node/terminal.service.d.ts.map +1 -1
- package/lib/node/terminal.service.js +36 -10
- package/lib/node/terminal.service.js.map +1 -1
- package/package.json +16 -16
- package/lib/browser/terminal.contribution.d.ts +0 -7
- package/lib/browser/terminal.contribution.d.ts.map +0 -1
- package/lib/browser/terminal.contribution.js +0 -32
- package/lib/browser/terminal.contribution.js.map +0 -1
- package/lib/common/menu.d.ts +0 -5
- package/lib/common/menu.d.ts.map +0 -1
- package/lib/common/menu.js +0 -9
- package/lib/common/menu.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xterm.d.ts","sourceRoot":"","sources":["../../src/common/xterm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,cAAc,CAAC;IAC1B,YAAY,EAAE,gBAAgB,GAAG,gBAAgB,CAAC;IAElD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,IAAI,CAAC;IACb,GAAG,IAAI,IAAI,CAAC;IACZ,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,WAAW,IAAI,IAAI,CAAC;IACpB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAC9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xterm.js","sourceRoot":"","sources":["../../src/common/xterm.ts"],"names":[],"mappings":""}
|
package/lib/node/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAc,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAc,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAiBrD,qBACa,qBAAsB,SAAQ,UAAU;IACnD,SAAS,EAAE,QAAQ,EAAE,CAyBnB;IAEF,YAAY;;;QASV;CACH"}
|
package/lib/node/index.js
CHANGED
|
@@ -6,6 +6,7 @@ const di_1 = require("@opensumi/di");
|
|
|
6
6
|
const ide_core_node_1 = require("@opensumi/ide-core-node");
|
|
7
7
|
const common_1 = require("../common");
|
|
8
8
|
const pty_1 = require("./pty");
|
|
9
|
+
const pty_manager_1 = require("./pty.manager");
|
|
9
10
|
const terminal_process_service_1 = require("./terminal.process.service");
|
|
10
11
|
const terminal_profile_service_1 = require("./terminal.profile.service");
|
|
11
12
|
const terminal_service_1 = require("./terminal.service");
|
|
@@ -34,6 +35,10 @@ let TerminalNodePtyModule = class TerminalNodePtyModule extends ide_core_node_1.
|
|
|
34
35
|
token: terminal_profile_service_1.ITerminalProfileServiceNode,
|
|
35
36
|
useClass: terminal_profile_service_1.TerminalProfileServiceNode,
|
|
36
37
|
},
|
|
38
|
+
{
|
|
39
|
+
token: pty_manager_1.PtyServiceManagerToken,
|
|
40
|
+
useClass: pty_manager_1.PtyServiceManager,
|
|
41
|
+
},
|
|
37
42
|
];
|
|
38
43
|
this.backServices = [
|
|
39
44
|
{
|
package/lib/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":";;;;AAAA,qCAAoD;AACpD,2DAAqD;AAErD,sCAMmB;AAEnB,+BAAgD;AAChD,yEAAwE;AACxE,yEAAqG;AACrG,yDAAyD;AACzD,uEAAsE;AAGtE,IAAa,qBAAqB,GAAlC,MAAa,qBAAsB,SAAQ,0BAAU;IAArD;;QACE,cAAS,GAAe;YACtB;gBACE,KAAK,EAAE,6BAAoB;gBAC3B,QAAQ,EAAE,sCAAmB;aAC9B;YACD;gBACE,KAAK,EAAE,+BAAsB;gBAC7B,QAAQ,EAAE,mDAAyB;aACpC;YACD;gBACE,KAAK,EAAE,gCAAuB;gBAC9B,QAAQ,EAAE,qDAA0B;aACrC;YACD;gBACE,KAAK,EAAE,iBAAW;gBAClB,QAAQ,EAAE,gBAAU;aACrB;YACD;gBACE,KAAK,EAAE,sDAA2B;gBAClC,QAAQ,EAAE,qDAA0B;aACrC;SACF,CAAC;QAEF,iBAAY,GAAG;YACb;gBACE,WAAW,EAAE,6BAAoB;gBACjC,KAAK,EAAE,+BAAsB;aAC9B;YACD;gBACE,WAAW,EAAE,6BAAoB;gBACjC,KAAK,EAAE,gCAAuB;aAC/B;SACF,CAAC;IACJ,CAAC;CAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":";;;;AAAA,qCAAoD;AACpD,2DAAqD;AAErD,sCAMmB;AAEnB,+BAAgD;AAChD,+CAA0E;AAC1E,yEAAwE;AACxE,yEAAqG;AACrG,yDAAyD;AACzD,uEAAsE;AAGtE,IAAa,qBAAqB,GAAlC,MAAa,qBAAsB,SAAQ,0BAAU;IAArD;;QACE,cAAS,GAAe;YACtB;gBACE,KAAK,EAAE,6BAAoB;gBAC3B,QAAQ,EAAE,sCAAmB;aAC9B;YACD;gBACE,KAAK,EAAE,+BAAsB;gBAC7B,QAAQ,EAAE,mDAAyB;aACpC;YACD;gBACE,KAAK,EAAE,gCAAuB;gBAC9B,QAAQ,EAAE,qDAA0B;aACrC;YACD;gBACE,KAAK,EAAE,iBAAW;gBAClB,QAAQ,EAAE,gBAAU;aACrB;YACD;gBACE,KAAK,EAAE,sDAA2B;gBAClC,QAAQ,EAAE,qDAA0B;aACrC;YACD;gBACE,KAAK,EAAE,oCAAsB;gBAC7B,QAAQ,EAAE,+BAAiB;aAC5B;SACF,CAAC;QAEF,iBAAY,GAAG;YACb;gBACE,WAAW,EAAE,6BAAoB;gBACjC,KAAK,EAAE,+BAAsB;aAC9B;YACD;gBACE,WAAW,EAAE,6BAAoB;gBACjC,KAAK,EAAE,gCAAuB;aAC/B;SACF,CAAC;IACJ,CAAC;CAAA,CAAA;AAtCY,qBAAqB;IADjC,IAAA,eAAU,GAAE;GACA,qBAAqB,CAsCjC;AAtCY,sDAAqB"}
|
package/lib/node/pty.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as pty from 'node-pty';
|
|
2
|
+
import { Disposable, INodeLogger } from '@opensumi/ide-core-node';
|
|
2
3
|
import { IShellLaunchConfig, ITerminalLaunchError } from '../common';
|
|
3
4
|
import { IProcessReadyEvent, IProcessExitEvent } from '../common/process';
|
|
4
5
|
import { IPtyProcess } from '../common/pty';
|
|
6
|
+
import { IPtyServiceManager } from './pty.manager';
|
|
5
7
|
export declare const IPtyService: unique symbol;
|
|
6
8
|
export declare class PtyService extends Disposable {
|
|
7
9
|
id: string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
readonly shellLaunchConfig: IShellLaunchConfig;
|
|
11
|
+
protected readonly logger: INodeLogger;
|
|
12
|
+
protected readonly ptyServiceManager: IPtyServiceManager;
|
|
13
|
+
protected readonly _ptyOptions: pty.IPtyForkOptions | pty.IWindowsPtyForkOptions;
|
|
11
14
|
private _ptyProcess;
|
|
12
15
|
private readonly _onData;
|
|
13
16
|
readonly onData: import("@opensumi/ide-core-node").Event<string>;
|
|
@@ -15,6 +18,7 @@ export declare class PtyService extends Disposable {
|
|
|
15
18
|
readonly onReady: import("@opensumi/ide-core-node").Event<IProcessReadyEvent>;
|
|
16
19
|
private readonly _onExit;
|
|
17
20
|
readonly onExit: import("@opensumi/ide-core-node").Event<IProcessExitEvent>;
|
|
21
|
+
private readonly sessionId;
|
|
18
22
|
private readonly _onProcessChange;
|
|
19
23
|
readonly onProcessChange: import("@opensumi/ide-core-node").Event<string>;
|
|
20
24
|
private previouslyProcess;
|
|
@@ -24,7 +28,7 @@ export declare class PtyService extends Disposable {
|
|
|
24
28
|
_validateCwd(): Promise<ITerminalLaunchError | undefined>;
|
|
25
29
|
_validateExecutable(): Promise<ITerminalLaunchError | undefined>;
|
|
26
30
|
start(): Promise<ITerminalLaunchError | undefined>;
|
|
27
|
-
|
|
31
|
+
protected setupPtyProcess(): Promise<void>;
|
|
28
32
|
private _sendProcessId;
|
|
29
33
|
parseCwd(): string;
|
|
30
34
|
getShellName(): string;
|
package/lib/node/pty.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty.d.ts","sourceRoot":"","sources":["../../src/node/pty.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pty.d.ts","sourceRoot":"","sources":["../../src/node/pty.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAIhC,OAAO,EAAE,UAAU,EAAW,WAAW,EAAmB,MAAM,yBAAyB,CAAC;AAG5F,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAA0B,MAAM,eAAe,CAAC;AAG3E,eAAO,MAAM,WAAW,eAAwB,CAAC;AAEjD,qBACa,UAAW,SAAQ,UAAU;IA+BrB,EAAE,EAAE,MAAM;aAAkB,iBAAiB,EAAE,kBAAkB;IA7BpF,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAGvC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IAEzD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,sBAAsB,CAAC;IACjF,OAAO,CAAC,WAAW,CAA0B;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,QAAQ,CAAC,MAAM,kDAAsB;IAErC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,QAAQ,CAAC,OAAO,8DAAuB;IAEvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,QAAQ,CAAC,MAAM,6DAAsB;IAGrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAC1D,QAAQ,CAAC,eAAe,kDAA+B;IAEvD,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,IAAI,GAAG,4BAEN;gBAEkB,EAAE,EAAE,MAAM,EAAkB,iBAAiB,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAsB1G,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB,YAAY,IAAI,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAuBzD,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAiChE,KAAK,IAAI,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;cAoDxC,eAAe;IAqC/B,OAAO,CAAC,cAAc;IAMtB,QAAQ;IASR,YAAY;IAIZ,MAAM;IAIN,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IASjC,SAAS,CAAC,IAAI,EAAE,MAAM;CAGvB"}
|
package/lib/node/pty.js
CHANGED
|
@@ -10,13 +10,11 @@ const tslib_1 = require("tslib");
|
|
|
10
10
|
const fs_1 = require("fs");
|
|
11
11
|
const os_1 = tslib_1.__importDefault(require("os"));
|
|
12
12
|
const omit_1 = tslib_1.__importDefault(require("lodash/omit"));
|
|
13
|
-
const pty = tslib_1.__importStar(require("node-pty"));
|
|
14
13
|
const osLocale = tslib_1.__importStar(require("os-locale"));
|
|
15
14
|
const di_1 = require("@opensumi/di");
|
|
16
|
-
const path = tslib_1.__importStar(require("@opensumi/ide-core-common/lib/path"));
|
|
17
|
-
const platform_1 = require("@opensumi/ide-core-common/lib/platform");
|
|
18
15
|
const ide_core_node_1 = require("@opensumi/ide-core-node");
|
|
19
16
|
const shell_path_1 = require("@opensumi/ide-core-node/lib/bootstrap/shell-path");
|
|
17
|
+
const pty_manager_1 = require("./pty.manager");
|
|
20
18
|
const shell_1 = require("./shell");
|
|
21
19
|
exports.IPtyService = Symbol('IPtyService');
|
|
22
20
|
let PtyService = class PtyService extends ide_core_node_1.Disposable {
|
|
@@ -33,8 +31,8 @@ let PtyService = class PtyService extends ide_core_node_1.Disposable {
|
|
|
33
31
|
this._onProcessChange = new ide_core_node_1.Emitter();
|
|
34
32
|
this.onProcessChange = this._onProcessChange.event;
|
|
35
33
|
let name;
|
|
36
|
-
if (
|
|
37
|
-
name = path.basename(this.shellLaunchConfig.executable || '');
|
|
34
|
+
if (ide_core_node_1.isWindows) {
|
|
35
|
+
name = ide_core_node_1.path.basename(this.shellLaunchConfig.executable || '');
|
|
38
36
|
}
|
|
39
37
|
else {
|
|
40
38
|
// Using 'xterm-256color' here helps ensure that the majority of Linux distributions will use a
|
|
@@ -49,6 +47,7 @@ let PtyService = class PtyService extends ide_core_node_1.Disposable {
|
|
|
49
47
|
cols,
|
|
50
48
|
rows,
|
|
51
49
|
};
|
|
50
|
+
this.sessionId = id;
|
|
52
51
|
}
|
|
53
52
|
get pty() {
|
|
54
53
|
return this._ptyProcess;
|
|
@@ -108,7 +107,7 @@ let PtyService = class PtyService extends ide_core_node_1.Disposable {
|
|
|
108
107
|
catch (err) {
|
|
109
108
|
if ((err === null || err === void 0 ? void 0 : err.code) === 'ENOENT') {
|
|
110
109
|
// The executable isn't an absolute path, try find it on the PATH or CWD
|
|
111
|
-
const envPaths = options.env && options.env.PATH ? options.env.PATH.split(path.delimiter) : undefined;
|
|
110
|
+
const envPaths = options.env && options.env.PATH ? options.env.PATH.split(ide_core_node_1.path.delimiter) : undefined;
|
|
112
111
|
const executable = await (0, shell_1.findExecutable)(options.executable, cwd, envPaths);
|
|
113
112
|
if (!executable) {
|
|
114
113
|
return {
|
|
@@ -167,10 +166,10 @@ let PtyService = class PtyService extends ide_core_node_1.Disposable {
|
|
|
167
166
|
async setupPtyProcess() {
|
|
168
167
|
const options = this.shellLaunchConfig;
|
|
169
168
|
const args = options.args || [];
|
|
170
|
-
const ptyProcess =
|
|
171
|
-
this.addDispose(ptyProcess.onData((e) => {
|
|
169
|
+
const ptyProcess = await this.ptyServiceManager.spawn(options.executable, args, this._ptyOptions, this.sessionId);
|
|
170
|
+
this.addDispose(ptyProcess.onData(async (e) => {
|
|
172
171
|
this._onData.fire(e);
|
|
173
|
-
const processName = ptyProcess.
|
|
172
|
+
const processName = await ptyProcess.getProcessDynamically();
|
|
174
173
|
if (processName !== this.previouslyProcess) {
|
|
175
174
|
this.previouslyProcess = processName;
|
|
176
175
|
this._onProcessChange.fire(processName);
|
|
@@ -182,7 +181,7 @@ let PtyService = class PtyService extends ide_core_node_1.Disposable {
|
|
|
182
181
|
}));
|
|
183
182
|
ptyProcess.bin = options.executable;
|
|
184
183
|
ptyProcess.launchConfig = options;
|
|
185
|
-
ptyProcess.parsedName = path.basename(options.executable);
|
|
184
|
+
ptyProcess.parsedName = ide_core_node_1.path.basename(options.executable);
|
|
186
185
|
this._sendProcessId(ptyProcess.pid);
|
|
187
186
|
this._ptyProcess = ptyProcess;
|
|
188
187
|
}
|
|
@@ -226,6 +225,10 @@ tslib_1.__decorate([
|
|
|
226
225
|
(0, di_1.Autowired)(ide_core_node_1.INodeLogger),
|
|
227
226
|
tslib_1.__metadata("design:type", Object)
|
|
228
227
|
], PtyService.prototype, "logger", void 0);
|
|
228
|
+
tslib_1.__decorate([
|
|
229
|
+
(0, di_1.Autowired)(pty_manager_1.PtyServiceManagerToken),
|
|
230
|
+
tslib_1.__metadata("design:type", Object)
|
|
231
|
+
], PtyService.prototype, "ptyServiceManager", void 0);
|
|
229
232
|
PtyService = tslib_1.__decorate([
|
|
230
233
|
(0, di_1.Injectable)({ multiple: true }),
|
|
231
234
|
tslib_1.__metadata("design:paramtypes", [String, Object, Number, Number])
|
package/lib/node/pty.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../../src/node/pty.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;;AAEhG,sIAAsI;AAEtI,2BAA8B;AAC9B,oDAAoB;AAEpB,+DAA+B;
|
|
1
|
+
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../../src/node/pty.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as pty from 'node-pty';
|
|
2
|
+
import { INodeLogger } from '@opensumi/ide-core-node';
|
|
3
|
+
import { IPtyProcessProxy, IPtyProxyRPCService } from '../common';
|
|
4
|
+
export declare const PtyServiceManagerToken: unique symbol;
|
|
5
|
+
/**
|
|
6
|
+
* 在 IDE 容器中运行,具体分为两类实现。通过 DI 注入替换来做到两种模式的替换
|
|
7
|
+
* 1.与远程容器通信,完成终端的创建连接一些列事情 - 双容器架构
|
|
8
|
+
* 2.直接走同进程调用,操作终端 - 传统架构
|
|
9
|
+
*/
|
|
10
|
+
export interface IPtyServiceManager {
|
|
11
|
+
spawn(file: string, args: string[] | string, options: pty.IPtyForkOptions | pty.IWindowsPtyForkOptions, sessionId?: string): Promise<IPtyProcessProxy>;
|
|
12
|
+
onData(pid: number, listener: (e: string) => any): pty.IDisposable;
|
|
13
|
+
onExit(pid: number, listener: (e: {
|
|
14
|
+
exitCode: number;
|
|
15
|
+
signal?: number;
|
|
16
|
+
}) => any): pty.IDisposable;
|
|
17
|
+
on(pid: number, event: 'data', listener: (data: string) => void): void;
|
|
18
|
+
on(pid: number, event: 'exit', listener: (exitCode: number, signal?: number) => void): void;
|
|
19
|
+
on(pid: number, event: any, listener: (data: any) => void): void;
|
|
20
|
+
resize(pid: number, columns: number, rows: number): void;
|
|
21
|
+
write(pid: number, data: string): void;
|
|
22
|
+
pause(pid: number): void;
|
|
23
|
+
resume(pid: number): void;
|
|
24
|
+
kill(pid: number, signal?: string): void;
|
|
25
|
+
getProcess(pid: any): Promise<string>;
|
|
26
|
+
checkSession(sessionId: string): Promise<boolean>;
|
|
27
|
+
}
|
|
28
|
+
export declare class PtyServiceManager implements IPtyServiceManager {
|
|
29
|
+
protected callId: number;
|
|
30
|
+
protected callbackMap: Map<number, (...args: any[]) => void>;
|
|
31
|
+
protected ptyServiceProxy: IPtyProxyRPCService;
|
|
32
|
+
protected logger: INodeLogger;
|
|
33
|
+
constructor();
|
|
34
|
+
protected initLocal(): void;
|
|
35
|
+
private addNewCallback;
|
|
36
|
+
spawn(file: string, args: string[] | string, options: pty.IPtyForkOptions | pty.IWindowsPtyForkOptions, sessionId?: string): Promise<IPtyProcessProxy>;
|
|
37
|
+
getProcess(pid: any): Promise<string>;
|
|
38
|
+
onData(pid: number, listener: (e: string) => any): pty.IDisposable;
|
|
39
|
+
onExit(pid: number, listener: (e: {
|
|
40
|
+
exitCode: number;
|
|
41
|
+
signal?: number;
|
|
42
|
+
}) => any): pty.IDisposable;
|
|
43
|
+
on(pid: number, event: 'data', listener: (data: string) => void): void;
|
|
44
|
+
on(pid: number, event: 'exit', listener: (exitCode: number, signal?: number) => void): void;
|
|
45
|
+
resize(pid: number, columns: number, rows: number): void;
|
|
46
|
+
write(pid: number, data: string): void;
|
|
47
|
+
kill(pid: number, signal?: string): void;
|
|
48
|
+
pause(pid: number): void;
|
|
49
|
+
resume(pid: number): void;
|
|
50
|
+
checkSession(sessionId: string): Promise<boolean>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=pty.manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty.manager.d.ts","sourceRoot":"","sources":["../../src/node/pty.manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PtyServiceManager = exports.PtyServiceManagerToken = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const di_1 = require("@opensumi/di");
|
|
6
|
+
const ide_core_node_1 = require("@opensumi/ide-core-node");
|
|
7
|
+
const pty_proxy_1 = require("./pty.proxy");
|
|
8
|
+
exports.PtyServiceManagerToken = Symbol('PtyServiceManager');
|
|
9
|
+
// 记录终端输入到输出的时间戳,主要是用于统计 Pty 处理 + IDE <--> Pty 的IPC 耗时
|
|
10
|
+
let timeCaptureTmp = 0;
|
|
11
|
+
// 终端的命令可能会有多行输出,避免后面几次输出也被用于时间差计算统计,因此一次 write,一次统计
|
|
12
|
+
let timeCaptureFilter = false;
|
|
13
|
+
// 标准单容器架构 - 在 IDE 容器中运行,PtyService 也在 IDE 进程中运行
|
|
14
|
+
// 如果需要用到双容器远程架构,可以查看 PtyServiceManagerRemote 的实现
|
|
15
|
+
let PtyServiceManager = class PtyServiceManager {
|
|
16
|
+
// Pty 运行在 IDE Server 上,因此可以直接调用
|
|
17
|
+
constructor() {
|
|
18
|
+
this.callId = 0;
|
|
19
|
+
this.callbackMap = new Map();
|
|
20
|
+
this.initLocal();
|
|
21
|
+
}
|
|
22
|
+
initLocal() {
|
|
23
|
+
const callback = async (callId, ...args) => {
|
|
24
|
+
const callback = this.callbackMap.get(callId);
|
|
25
|
+
if (!callback) {
|
|
26
|
+
return Promise.reject(new Error(`no found callback: ${callId}`));
|
|
27
|
+
}
|
|
28
|
+
callback(...args);
|
|
29
|
+
};
|
|
30
|
+
this.ptyServiceProxy = new pty_proxy_1.PtyServiceProxy(callback);
|
|
31
|
+
}
|
|
32
|
+
// 维护一个 CallbackMap,用于在 PtyServiceProxy 中远程调用回调
|
|
33
|
+
// 因为在 RPC 调用中本身是没法直接传递回调 Function 的,所以需要在远程调用中传递 callId,在本地调用中通过 callId 获取回调
|
|
34
|
+
addNewCallback(pid, callback) {
|
|
35
|
+
const callId = this.callId++;
|
|
36
|
+
this.callbackMap.set(callId, callback);
|
|
37
|
+
const disposable = {
|
|
38
|
+
dispose: () => {
|
|
39
|
+
this.callbackMap.delete(callId);
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
return { callId, disposable };
|
|
43
|
+
}
|
|
44
|
+
async spawn(file, args, options, sessionId) {
|
|
45
|
+
const iPtyRemoteProxy = (await this.ptyServiceProxy.$spawn(file, args, options, sessionId));
|
|
46
|
+
// 局部功能的 Ipty, 代理所有常量
|
|
47
|
+
return new PtyProcessProxy(iPtyRemoteProxy, this);
|
|
48
|
+
}
|
|
49
|
+
async getProcess(pid) {
|
|
50
|
+
return await this.ptyServiceProxy.$getProcess(pid);
|
|
51
|
+
}
|
|
52
|
+
// 实现 Ipty 的需要回调的逻辑接口,同时注入
|
|
53
|
+
onData(pid, listener) {
|
|
54
|
+
const monitorListener = (resString) => {
|
|
55
|
+
listener(resString);
|
|
56
|
+
if (timeCaptureFilter) {
|
|
57
|
+
const timeDiff = new Date().getTime() - timeCaptureTmp;
|
|
58
|
+
this.logger.log(`PtyServiceManager.onData: ${timeDiff}ms data: ${resString.substring(0, 100)}`);
|
|
59
|
+
timeCaptureFilter = false;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const { callId, disposable } = this.addNewCallback(pid, monitorListener);
|
|
63
|
+
this.ptyServiceProxy.$onData(callId, pid);
|
|
64
|
+
return disposable;
|
|
65
|
+
}
|
|
66
|
+
onExit(pid, listener) {
|
|
67
|
+
const { callId, disposable } = this.addNewCallback(pid, listener);
|
|
68
|
+
this.ptyServiceProxy.$onExit(callId, pid);
|
|
69
|
+
return disposable;
|
|
70
|
+
}
|
|
71
|
+
on(pid, event, listener) {
|
|
72
|
+
const { callId } = this.addNewCallback(pid, listener);
|
|
73
|
+
this.ptyServiceProxy.$on(callId, pid, event);
|
|
74
|
+
}
|
|
75
|
+
resize(pid, columns, rows) {
|
|
76
|
+
this.ptyServiceProxy.$resize(pid, columns, rows);
|
|
77
|
+
}
|
|
78
|
+
write(pid, data) {
|
|
79
|
+
timeCaptureTmp = new Date().getTime();
|
|
80
|
+
if (data.includes('=')) {
|
|
81
|
+
// 使用 '=' 作为触发本地通信统计的标识
|
|
82
|
+
timeCaptureFilter = true;
|
|
83
|
+
}
|
|
84
|
+
this.ptyServiceProxy.$write(pid, data);
|
|
85
|
+
}
|
|
86
|
+
kill(pid, signal) {
|
|
87
|
+
this.ptyServiceProxy.$kill(pid, signal);
|
|
88
|
+
}
|
|
89
|
+
pause(pid) {
|
|
90
|
+
this.ptyServiceProxy.$pause(pid);
|
|
91
|
+
}
|
|
92
|
+
resume(pid) {
|
|
93
|
+
this.ptyServiceProxy.$resume(pid);
|
|
94
|
+
}
|
|
95
|
+
async checkSession(sessionId) {
|
|
96
|
+
return await this.ptyServiceProxy.$checkSession(sessionId);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
tslib_1.__decorate([
|
|
100
|
+
(0, di_1.Autowired)(ide_core_node_1.INodeLogger),
|
|
101
|
+
tslib_1.__metadata("design:type", Object)
|
|
102
|
+
], PtyServiceManager.prototype, "logger", void 0);
|
|
103
|
+
PtyServiceManager = tslib_1.__decorate([
|
|
104
|
+
(0, di_1.Injectable)(),
|
|
105
|
+
tslib_1.__metadata("design:paramtypes", [])
|
|
106
|
+
], PtyServiceManager);
|
|
107
|
+
exports.PtyServiceManager = PtyServiceManager;
|
|
108
|
+
// Pty 进程的 Remote 代理
|
|
109
|
+
// 实现了 IPtyProcessProxy 背后是 NodePty 的 INodePty, 因此可以做到和本地化直接调用 NodePty 的代码兼容
|
|
110
|
+
class PtyProcessProxy {
|
|
111
|
+
constructor(iptyProxy, ptyServiceManager) {
|
|
112
|
+
this.ptyServiceManager = ptyServiceManager;
|
|
113
|
+
this.pid = iptyProxy.pid;
|
|
114
|
+
this.cols = iptyProxy.cols;
|
|
115
|
+
this.rows = iptyProxy.rows;
|
|
116
|
+
this._process = iptyProxy.process;
|
|
117
|
+
this.handleFlowControl = iptyProxy.handleFlowControl;
|
|
118
|
+
this.onData = (listener) => this.ptyServiceManager.onData(this.pid, listener);
|
|
119
|
+
this.onExit = (listener) => this.ptyServiceManager.onExit(this.pid, listener);
|
|
120
|
+
}
|
|
121
|
+
get process() {
|
|
122
|
+
return this._process;
|
|
123
|
+
}
|
|
124
|
+
// 获取实时的ProcessName
|
|
125
|
+
async getProcessDynamically() {
|
|
126
|
+
const process = await this.ptyServiceManager.getProcess(this.pid);
|
|
127
|
+
this._process = process;
|
|
128
|
+
return process;
|
|
129
|
+
}
|
|
130
|
+
on(event, listener) {
|
|
131
|
+
this.ptyServiceManager.on(this.pid, event, listener);
|
|
132
|
+
}
|
|
133
|
+
resize(columns, rows) {
|
|
134
|
+
this.ptyServiceManager.resize(this.pid, columns, rows);
|
|
135
|
+
}
|
|
136
|
+
write(data) {
|
|
137
|
+
this.ptyServiceManager.write(this.pid, data);
|
|
138
|
+
}
|
|
139
|
+
kill(signal) {
|
|
140
|
+
this.ptyServiceManager.kill(this.pid, signal);
|
|
141
|
+
}
|
|
142
|
+
pause() {
|
|
143
|
+
this.ptyServiceManager.pause(this.pid);
|
|
144
|
+
}
|
|
145
|
+
resume() {
|
|
146
|
+
this.ptyServiceManager.resume(this.pid);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=pty.manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty.manager.js","sourceRoot":"","sources":["../../src/node/pty.manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { SocketConnectOpts } from 'net';
|
|
3
|
+
import { PtyServiceManager } from './pty.manager';
|
|
4
|
+
export declare class PtyServiceManagerRemote extends PtyServiceManager {
|
|
5
|
+
constructor(connectOpts?: SocketConnectOpts);
|
|
6
|
+
private initRPCService;
|
|
7
|
+
private initRemoteConnectionMode;
|
|
8
|
+
protected initLocal(): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=pty.manager.remote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty.manager.remote.d.ts","sourceRoot":"","sources":["../../src/node/pty.manager.remote.ts"],"names":[],"mappings":";AAAA,OAAY,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAC;AAc7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAKlD,qBACa,uBAAwB,SAAQ,iBAAiB;gBAEpC,WAAW,GAAE,iBAA2D;IAKhG,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,wBAAwB;IAgChC,SAAS,CAAC,SAAS;CAGpB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PtyServiceManagerRemote = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const net_1 = tslib_1.__importDefault(require("net"));
|
|
6
|
+
const di_1 = require("@opensumi/di");
|
|
7
|
+
const ide_connection_1 = require("@opensumi/ide-connection");
|
|
8
|
+
const node_1 = require("@opensumi/ide-connection/lib/node");
|
|
9
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
10
|
+
const common_1 = require("../common");
|
|
11
|
+
const pty_manager_1 = require("./pty.manager");
|
|
12
|
+
// 双容器架构 - 在IDE容器中远程运行,与DEV Server上的PtyService通信
|
|
13
|
+
// 继承自PtyServiceManager,覆写了创建PtyProxyService连接的方法,用于需要远程连接PtyService的场景
|
|
14
|
+
// 具体需要根据应用场景,通过DI注入覆盖PtyServiceManager使用
|
|
15
|
+
let PtyServiceManagerRemote = class PtyServiceManagerRemote extends pty_manager_1.PtyServiceManager {
|
|
16
|
+
// Pty运行在单独的容器上,通过Socket连接,可以自定义Socket连接参数
|
|
17
|
+
constructor(connectOpts = { port: common_1.PTY_SERVICE_PROXY_SERVER_PORT }) {
|
|
18
|
+
super();
|
|
19
|
+
this.initRemoteConnectionMode(connectOpts);
|
|
20
|
+
}
|
|
21
|
+
initRPCService(socket) {
|
|
22
|
+
const clientCenter = new ide_connection_1.RPCServiceCenter();
|
|
23
|
+
const { getRPCService: clientGetRPCService, createRPCService } = (0, ide_connection_1.initRPCService)(clientCenter);
|
|
24
|
+
const getService = clientGetRPCService(common_1.PTY_SERVICE_PROXY_PROTOCOL);
|
|
25
|
+
this.ptyServiceProxy = getService;
|
|
26
|
+
let callbackDisposed = false;
|
|
27
|
+
// 处理回调
|
|
28
|
+
createRPCService(common_1.PTY_SERVICE_PROXY_CALLBACK_PROTOCOL, {
|
|
29
|
+
$callback: async (callId, ...args) => {
|
|
30
|
+
if (callbackDisposed) {
|
|
31
|
+
// 在这里做一下Dispose的处理,在Dispose之后回调不再被执行
|
|
32
|
+
// TODO: 但是按照我的理解,在removeConnection之后这里就完全不应该被执行,但却被执行了,是为什么呢?
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const callback = this.callbackMap.get(callId);
|
|
36
|
+
if (!callback) {
|
|
37
|
+
// 这里callbackMap的callId对应的回调方法被注销,但是依然被调用了,这种情况不应该发生
|
|
38
|
+
this.logger.warn('PtyServiceManager not found callback:', callId);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
callback(...args);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
const messageConnection = (0, node_1.createSocketConnection)(socket);
|
|
46
|
+
clientCenter.setConnection(messageConnection);
|
|
47
|
+
return ide_core_common_1.Disposable.create(() => {
|
|
48
|
+
callbackDisposed = true;
|
|
49
|
+
clientCenter.removeConnection(messageConnection);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
initRemoteConnectionMode(connectOpts) {
|
|
53
|
+
const socket = new net_1.default.Socket();
|
|
54
|
+
let rpcServiceDisposable;
|
|
55
|
+
// UNIX Socket 连接监听,成功连接后再创建RPC服务
|
|
56
|
+
socket.on('connect', () => {
|
|
57
|
+
this.logger.log('PtyServiceManagerRemote connected');
|
|
58
|
+
rpcServiceDisposable === null || rpcServiceDisposable === void 0 ? void 0 : rpcServiceDisposable.dispose();
|
|
59
|
+
rpcServiceDisposable = this.initRPCService(socket);
|
|
60
|
+
});
|
|
61
|
+
// UNIX Socket 连接失败或者断开,此时需要等待 1.5s 后重新连接
|
|
62
|
+
socket.on('close', () => {
|
|
63
|
+
this.logger.log('PtyServiceManagerRemote connect failed, will reconnect after 2s');
|
|
64
|
+
rpcServiceDisposable === null || rpcServiceDisposable === void 0 ? void 0 : rpcServiceDisposable.dispose();
|
|
65
|
+
global.setTimeout(() => {
|
|
66
|
+
try {
|
|
67
|
+
socket.connect(connectOpts);
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
this.logger.warn(e);
|
|
71
|
+
}
|
|
72
|
+
}, 2000);
|
|
73
|
+
});
|
|
74
|
+
try {
|
|
75
|
+
socket.connect(connectOpts);
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
// 连接错误的时候会抛出异常,此时自动重连,同时需要 catch 错误
|
|
79
|
+
this.logger.warn(e);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
initLocal() {
|
|
83
|
+
// override 空置父类的方法,因为不需要LocalInit,使用RemoteInit替代
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
PtyServiceManagerRemote = tslib_1.__decorate([
|
|
87
|
+
(0, di_1.Injectable)(),
|
|
88
|
+
tslib_1.__param(0, (0, di_1.Optional)()),
|
|
89
|
+
tslib_1.__metadata("design:paramtypes", [Object])
|
|
90
|
+
], PtyServiceManagerRemote);
|
|
91
|
+
exports.PtyServiceManagerRemote = PtyServiceManagerRemote;
|
|
92
|
+
//# sourceMappingURL=pty.manager.remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty.manager.remote.js","sourceRoot":"","sources":["../../src/node/pty.manager.remote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ListenOptions } from 'net';
|
|
3
|
+
import * as pty from 'node-pty';
|
|
4
|
+
import { IPtyProxyRPCService } from '../common';
|
|
5
|
+
/**
|
|
6
|
+
* NOTE: 这里面的Session通常是短Session 也就是OpenSumi里面Session `${clientId}|${sessionId}` 的sessionId部分
|
|
7
|
+
* 因为ClientId在每次刷新都会变化,而SessionId可以被持久化保存,后续按照之前的SessionID连接Pty的时候就可以做到Terminal Resume
|
|
8
|
+
*
|
|
9
|
+
* PtyServiceProxy是真实运行的托管着NodePty的代理
|
|
10
|
+
*/
|
|
11
|
+
export declare class PtyServiceProxy implements IPtyProxyRPCService {
|
|
12
|
+
private ptyInstanceMap;
|
|
13
|
+
private ptyDataCacheMap;
|
|
14
|
+
private ptySessionMap;
|
|
15
|
+
private ptyDisposableMap;
|
|
16
|
+
private readonly debugLogger;
|
|
17
|
+
private $callback;
|
|
18
|
+
constructor(callback: (callId: number, ...args: any[]) => void);
|
|
19
|
+
private checkProcess;
|
|
20
|
+
$checkSession(sessionId: string): boolean;
|
|
21
|
+
$spawn(file: string, args: string[] | string, options: pty.IPtyForkOptions | pty.IWindowsPtyForkOptions, longSessionId?: string): any;
|
|
22
|
+
$onData(callId: number, pid: number): void;
|
|
23
|
+
$onExit(callId: number, pid: number): void;
|
|
24
|
+
$on(callId: number, pid: number, event: any): void;
|
|
25
|
+
$resize(pid: number, columns: number, rows: number): void;
|
|
26
|
+
$write(pid: number, data: string): void;
|
|
27
|
+
$kill(pid: number, signal?: string): void;
|
|
28
|
+
$pause(pid: number): void;
|
|
29
|
+
$resume(pid: number): void;
|
|
30
|
+
$getProcess(pid: number): string;
|
|
31
|
+
}
|
|
32
|
+
export declare class PtyServiceProxyRPCProvider {
|
|
33
|
+
private ptyServiceProxy;
|
|
34
|
+
private readonly ptyServiceCenter;
|
|
35
|
+
private readonly debugLogger;
|
|
36
|
+
private serverListenOptions;
|
|
37
|
+
private server;
|
|
38
|
+
constructor(listenOptions?: ListenOptions);
|
|
39
|
+
initServer(): void;
|
|
40
|
+
private createSocket;
|
|
41
|
+
private bindProcessHandler;
|
|
42
|
+
private setProxyConnection;
|
|
43
|
+
get $ptyServiceProxy(): PtyServiceProxy;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=pty.proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty.proxy.d.ts","sourceRoot":"","sources":["../../src/node/pty.proxy.ts"],"names":[],"mappings":";AAEA,OAAY,EAAE,aAAa,EAAU,MAAM,KAAK,CAAC;AAEjD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAMhC,OAAO,EACL,mBAAmB,EAKpB,MAAM,WAAW,CAAC;AAgCnB;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,mBAAmB;IAEzD,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,eAAe,CAAoC;IAE3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,gBAAgB,CAAwC;IAEhE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IACjE,OAAO,CAAC,SAAS,CAA+C;gBAEpD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,OAAA,KAAK,IAAI;IAKvD,OAAO,CAAC,YAAY;IASpB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IASzC,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EACvB,OAAO,EAAE,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,sBAAsB,EACzD,aAAa,CAAC,EAAE,MAAM,GACrB,GAAG;IA6DN,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAwB1C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAW1C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAOlD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAMvC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAQzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK1B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAIjC;AAGD,qBAAa,0BAA0B;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,MAAM,CAAS;gBAEX,aAAa,GAAE,aAAuD;IAY3E,UAAU;IAKjB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,kBAAkB;IAQ1B,IAAW,gBAAgB,IAAI,eAAe,CAE7C;CACF"}
|