@opensumi/ide-terminal-next 2.14.4 → 2.15.0
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/terminal.view.d.ts.map +1 -1
- package/lib/browser/component/terminal.view.js +7 -1
- package/lib/browser/component/terminal.view.js.map +1 -1
- package/lib/browser/component/terminal.widget.d.ts.map +1 -1
- package/lib/browser/component/terminal.widget.js +12 -3
- package/lib/browser/component/terminal.widget.js.map +1 -1
- package/lib/browser/contribution/index.d.ts +1 -0
- package/lib/browser/contribution/index.d.ts.map +1 -1
- package/lib/browser/contribution/index.js +1 -0
- package/lib/browser/contribution/index.js.map +1 -1
- package/lib/browser/contribution/terminal.preference.d.ts +6 -0
- package/lib/browser/contribution/terminal.preference.d.ts.map +1 -0
- package/lib/browser/contribution/terminal.preference.js +17 -0
- package/lib/browser/contribution/terminal.preference.js.map +1 -0
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +21 -1
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/terminal.api.d.ts.map +1 -1
- package/lib/browser/terminal.api.js +11 -10
- package/lib/browser/terminal.api.js.map +1 -1
- package/lib/browser/terminal.client.d.ts +33 -16
- package/lib/browser/terminal.client.d.ts.map +1 -1
- package/lib/browser/terminal.client.js +248 -113
- package/lib/browser/terminal.client.js.map +1 -1
- package/lib/browser/terminal.contribution.d.ts +7 -0
- package/lib/browser/terminal.contribution.d.ts.map +1 -0
- package/lib/browser/terminal.contribution.js +32 -0
- package/lib/browser/terminal.contribution.js.map +1 -0
- package/lib/browser/terminal.controller.d.ts +14 -3
- package/lib/browser/terminal.controller.d.ts.map +1 -1
- package/lib/browser/terminal.controller.js +44 -9
- package/lib/browser/terminal.controller.js.map +1 -1
- package/lib/browser/terminal.internal.service.d.ts +6 -2
- package/lib/browser/terminal.internal.service.d.ts.map +1 -1
- package/lib/browser/terminal.internal.service.js +27 -0
- package/lib/browser/terminal.internal.service.js.map +1 -1
- package/lib/browser/terminal.profile.d.ts +28 -0
- package/lib/browser/terminal.profile.d.ts.map +1 -0
- package/lib/browser/terminal.profile.internal.d.ts +16 -0
- package/lib/browser/terminal.profile.internal.d.ts.map +1 -0
- package/lib/browser/terminal.profile.internal.js +106 -0
- package/lib/browser/terminal.profile.internal.js.map +1 -0
- package/lib/browser/terminal.profile.js +146 -0
- package/lib/browser/terminal.profile.js.map +1 -0
- package/lib/browser/terminal.service.d.ts +7 -4
- package/lib/browser/terminal.service.d.ts.map +1 -1
- package/lib/browser/terminal.service.js +35 -19
- package/lib/browser/terminal.service.js.map +1 -1
- package/lib/browser/xterm.d.ts +24 -0
- package/lib/browser/xterm.d.ts.map +1 -0
- package/lib/browser/xterm.js +55 -0
- package/lib/browser/xterm.js.map +1 -0
- package/lib/common/client.d.ts +4 -2
- 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 +17 -1
- package/lib/common/controller.d.ts.map +1 -1
- package/lib/common/controller.js.map +1 -1
- package/lib/common/error.d.ts +8 -0
- package/lib/common/error.d.ts.map +1 -1
- package/lib/common/error.js +5 -1
- package/lib/common/error.js.map +1 -1
- package/lib/common/extension.d.ts +28 -2
- package/lib/common/extension.d.ts.map +1 -1
- package/lib/common/extension.js +6 -1
- package/lib/common/extension.js.map +1 -1
- package/lib/common/index.d.ts +2 -0
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +2 -0
- package/lib/common/index.js.map +1 -1
- package/lib/common/preference.d.ts +94 -0
- package/lib/common/preference.d.ts.map +1 -1
- package/lib/common/preference.js +140 -1
- package/lib/common/preference.js.map +1 -1
- package/lib/common/process.d.ts +8 -0
- package/lib/common/process.d.ts.map +1 -0
- package/lib/common/process.js +3 -0
- package/lib/common/process.js.map +1 -0
- package/lib/common/profile.d.ts +101 -0
- package/lib/common/profile.d.ts.map +1 -0
- package/lib/common/profile.js +28 -0
- package/lib/common/profile.js.map +1 -0
- package/lib/common/pty.d.ts +142 -24
- package/lib/common/pty.d.ts.map +1 -1
- package/lib/common/pty.js +2 -2
- package/lib/common/pty.js.map +1 -1
- package/lib/common/service.d.ts +11 -6
- package/lib/common/service.d.ts.map +1 -1
- package/lib/common/service.js.map +1 -1
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +6 -1
- package/lib/node/index.js.map +1 -1
- package/lib/node/pty.d.ts +29 -15
- package/lib/node/pty.d.ts.map +1 -1
- package/lib/node/pty.js +117 -41
- package/lib/node/pty.js.map +1 -1
- package/lib/node/shell.d.ts +11 -1
- package/lib/node/shell.d.ts.map +1 -1
- package/lib/node/shell.js +89 -9
- package/lib/node/shell.js.map +1 -1
- package/lib/node/{terminal-process.service.d.ts → terminal.process.service.d.ts} +1 -1
- package/lib/node/terminal.process.service.d.ts.map +1 -0
- package/lib/node/{terminal-process.service.js → terminal.process.service.js} +1 -1
- package/lib/node/{terminal-process.service.js.map → terminal.process.service.js.map} +1 -1
- package/lib/node/terminal.profile.service.d.ts +19 -0
- package/lib/node/terminal.profile.service.d.ts.map +1 -0
- package/lib/node/terminal.profile.service.js +229 -0
- package/lib/node/terminal.profile.service.js.map +1 -0
- package/lib/node/terminal.service.client.d.ts +8 -1
- package/lib/node/terminal.service.client.d.ts.map +1 -1
- package/lib/node/terminal.service.client.js +40 -13
- package/lib/node/terminal.service.client.js.map +1 -1
- package/lib/node/terminal.service.d.ts +7 -7
- package/lib/node/terminal.service.d.ts.map +1 -1
- package/lib/node/terminal.service.js +41 -23
- package/lib/node/terminal.service.js.map +1 -1
- package/package.json +15 -15
- package/lib/node/terminal-process.service.d.ts.map +0 -1
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* ---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TerminalProfileServiceNode = exports.ITerminalProfileServiceNode = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const platform_1 = require("@opensumi/ide-core-common/lib/platform");
|
|
10
|
+
const di_1 = require("@opensumi/di");
|
|
11
|
+
const shell_1 = require("./shell");
|
|
12
|
+
const ide_core_node_1 = require("@opensumi/ide-core-node");
|
|
13
|
+
const fs_extra_1 = require("fs-extra");
|
|
14
|
+
const path = (0, tslib_1.__importStar)(require("@opensumi/ide-core-common/lib/path"));
|
|
15
|
+
function applyConfigProfilesToMap(configProfiles, profilesMap) {
|
|
16
|
+
var _a;
|
|
17
|
+
if (!configProfiles) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
for (const [profileName, value] of Object.entries(configProfiles)) {
|
|
21
|
+
if (value === null || (!('path' in value) && !('source' in value))) {
|
|
22
|
+
profilesMap.delete(profileName);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
value.icon = value.icon || ((_a = profilesMap.get(profileName)) === null || _a === void 0 ? void 0 : _a.icon);
|
|
26
|
+
profilesMap.set(profileName, value);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.ITerminalProfileServiceNode = Symbol('ITerminalProfileServiceNode');
|
|
31
|
+
let TerminalProfileServiceNode = class TerminalProfileServiceNode {
|
|
32
|
+
constructor() { }
|
|
33
|
+
detectAvailableProfiles(options) {
|
|
34
|
+
if (options.preference) {
|
|
35
|
+
// 说明用户有设置 perference 中的 profile
|
|
36
|
+
// 目前 Node 端无法获取 browser 层的配置,所以需要前端传进来
|
|
37
|
+
this._perferenceProfiles = options.preference;
|
|
38
|
+
}
|
|
39
|
+
if (platform_1.isWindows) {
|
|
40
|
+
return this._detectWindowsProfiles(options);
|
|
41
|
+
}
|
|
42
|
+
return this._detectUnixProfiles(options);
|
|
43
|
+
}
|
|
44
|
+
_getPreferenceProfiles() {
|
|
45
|
+
return this._perferenceProfiles || {};
|
|
46
|
+
}
|
|
47
|
+
async _detectWindowsProfiles(options) {
|
|
48
|
+
const defaultProfileName = 'windowsDefault';
|
|
49
|
+
const configProfiles = this._getPreferenceProfiles();
|
|
50
|
+
const { autoDetect } = options;
|
|
51
|
+
// Determine the correct System32 path. We want to point to Sysnative
|
|
52
|
+
// when the 32-bit version of VS Code is running on a 64-bit machine.
|
|
53
|
+
// The reason for this is because PowerShell's important PSReadline
|
|
54
|
+
// module doesn't work if this is not the case. See #27915.
|
|
55
|
+
const is32ProcessOn64Windows = process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432');
|
|
56
|
+
const system32Path = `${process.env['windir']}\\${is32ProcessOn64Windows ? 'Sysnative' : 'System32'}`;
|
|
57
|
+
await this.initializeWindowsProfiles();
|
|
58
|
+
const detectedProfiles = new Map();
|
|
59
|
+
// Add auto detected profiles
|
|
60
|
+
if (autoDetect) {
|
|
61
|
+
detectedProfiles.set('PowerShell', {
|
|
62
|
+
source: "PowerShell" /* Pwsh */,
|
|
63
|
+
// icon: Codicon.terminalPowershell,
|
|
64
|
+
isAutoDetected: true,
|
|
65
|
+
});
|
|
66
|
+
detectedProfiles.set('Windows PowerShell', {
|
|
67
|
+
path: `${system32Path}\\WindowsPowerShell\\v1.0\\powershell.exe`,
|
|
68
|
+
// icon: Codicon.terminalPowershell,
|
|
69
|
+
isAutoDetected: true,
|
|
70
|
+
});
|
|
71
|
+
detectedProfiles.set('Git Bash', {
|
|
72
|
+
source: "Git Bash" /* GitBash */,
|
|
73
|
+
isAutoDetected: true,
|
|
74
|
+
});
|
|
75
|
+
detectedProfiles.set('Cygwin', {
|
|
76
|
+
path: [
|
|
77
|
+
`${process.env['HOMEDRIVE']}\\cygwin64\\bin\\bash.exe`,
|
|
78
|
+
`${process.env['HOMEDRIVE']}\\cygwin\\bin\\bash.exe`,
|
|
79
|
+
],
|
|
80
|
+
args: ['--login'],
|
|
81
|
+
isAutoDetected: true,
|
|
82
|
+
});
|
|
83
|
+
detectedProfiles.set('Command Prompt', {
|
|
84
|
+
path: `${system32Path}\\cmd.exe`,
|
|
85
|
+
// icon: Codicon.terminalCmd,
|
|
86
|
+
isAutoDetected: true,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
applyConfigProfilesToMap(configProfiles, detectedProfiles);
|
|
90
|
+
const resultProfiles = this.transformToTerminalProfiles(detectedProfiles.entries(), defaultProfileName);
|
|
91
|
+
// TODO: 暂不引入 WSL 的相关逻辑
|
|
92
|
+
// const useWslProfiles = ;
|
|
93
|
+
// let useWSLexe = false;
|
|
94
|
+
// if (getWindowsBuildNumber() >= 16299) {
|
|
95
|
+
// useWSLexe = true;
|
|
96
|
+
// }
|
|
97
|
+
// if (autoDetect || (!autoDetect && useWslProfiles)) {
|
|
98
|
+
// const wslPath = `${system32Path}\\${useWSLexe ? 'wsl' : 'bash'}.exe`;
|
|
99
|
+
// }
|
|
100
|
+
return resultProfiles;
|
|
101
|
+
}
|
|
102
|
+
async initializeWindowsProfiles() {
|
|
103
|
+
if (this.profileSources) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.profileSources = new Map();
|
|
107
|
+
this.profileSources.set('Git Bash', {
|
|
108
|
+
profileName: 'Git Bash',
|
|
109
|
+
paths: shell_1.WINDOWS_GIT_BASH_PATHS,
|
|
110
|
+
args: ['--login'],
|
|
111
|
+
});
|
|
112
|
+
this.profileSources.set('PowerShell', {
|
|
113
|
+
profileName: 'PowerShell',
|
|
114
|
+
paths: await (0, shell_1.getPowershellPaths)(),
|
|
115
|
+
// icon: ThemeIcon.asThemeIcon(Codicon.terminalPowershell),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
async _detectUnixProfiles(options) {
|
|
119
|
+
const defaultProfileName = 'unixDefault';
|
|
120
|
+
const { autoDetect } = options;
|
|
121
|
+
const configProfiles = this._getPreferenceProfiles();
|
|
122
|
+
const detectedProfiles = new Map();
|
|
123
|
+
if (autoDetect) {
|
|
124
|
+
const contents = (await (0, fs_extra_1.readFile)('/etc/shells')).toString();
|
|
125
|
+
const profiles = contents.split('\n').filter((e) => e.trim().indexOf('#') !== 0 && e.trim().length > 0);
|
|
126
|
+
const counts = new Map();
|
|
127
|
+
for (const profile of profiles) {
|
|
128
|
+
let profileName = path.basename(profile);
|
|
129
|
+
let count = counts.get(profileName) || 0;
|
|
130
|
+
count++;
|
|
131
|
+
if (count > 1) {
|
|
132
|
+
profileName = `${profileName} (${count})`;
|
|
133
|
+
}
|
|
134
|
+
counts.set(profileName, count);
|
|
135
|
+
detectedProfiles.set(profileName, { path: profile, isAutoDetected: true });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
applyConfigProfilesToMap(configProfiles, detectedProfiles);
|
|
139
|
+
return await this.transformToTerminalProfiles(detectedProfiles.entries(), defaultProfileName);
|
|
140
|
+
}
|
|
141
|
+
async validateProfilePaths(profileName, defaultProfileName, potentialPaths, args, env, overrideName, isAutoDetected) {
|
|
142
|
+
if (potentialPaths.length === 0) {
|
|
143
|
+
return Promise.resolve(undefined);
|
|
144
|
+
}
|
|
145
|
+
const potentialPath = potentialPaths.shift();
|
|
146
|
+
if (potentialPath === '') {
|
|
147
|
+
// 如果是空的,则跳过
|
|
148
|
+
return this.validateProfilePaths(profileName, defaultProfileName, potentialPaths, args, env, overrideName, isAutoDetected);
|
|
149
|
+
}
|
|
150
|
+
const profile = {
|
|
151
|
+
profileName,
|
|
152
|
+
path: potentialPath,
|
|
153
|
+
args,
|
|
154
|
+
env,
|
|
155
|
+
overrideName,
|
|
156
|
+
isAutoDetected,
|
|
157
|
+
isDefault: profileName === defaultProfileName,
|
|
158
|
+
};
|
|
159
|
+
// For non-absolute paths, check if it's available on $PATH
|
|
160
|
+
if (path.basename(potentialPath) === potentialPath) {
|
|
161
|
+
// The executable isn't an absolute path, try find it on the PATH
|
|
162
|
+
const executable = await (0, shell_1.findExecutable)(potentialPath, undefined, undefined, undefined);
|
|
163
|
+
if (!executable) {
|
|
164
|
+
return this.validateProfilePaths(profileName, defaultProfileName, potentialPaths, args, env, overrideName, isAutoDetected);
|
|
165
|
+
}
|
|
166
|
+
return profile;
|
|
167
|
+
}
|
|
168
|
+
const result = await (0, shell_1.exists)(potentialPath);
|
|
169
|
+
if (result) {
|
|
170
|
+
return profile;
|
|
171
|
+
}
|
|
172
|
+
return this.validateProfilePaths(profileName, defaultProfileName, potentialPaths, args, env, overrideName, isAutoDetected);
|
|
173
|
+
}
|
|
174
|
+
async transformToTerminalProfiles(entries, defaultProfileName) {
|
|
175
|
+
var _a;
|
|
176
|
+
const resultProfiles = [];
|
|
177
|
+
for (const [profileName, profile] of entries) {
|
|
178
|
+
if (profile === null) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
let originalPaths = [];
|
|
182
|
+
let args;
|
|
183
|
+
let icon;
|
|
184
|
+
if ('source' in profile) {
|
|
185
|
+
const source = (_a = this.profileSources) === null || _a === void 0 ? void 0 : _a.get(profile.source);
|
|
186
|
+
if (!source) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
originalPaths = source.paths;
|
|
190
|
+
// if there are configured args, override the default ones
|
|
191
|
+
args = profile.args || source.args;
|
|
192
|
+
if (profile.icon) {
|
|
193
|
+
// icon = validateIcon(profile.icon);
|
|
194
|
+
}
|
|
195
|
+
else if (source.icon) {
|
|
196
|
+
icon = source.icon;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
originalPaths = Array.isArray(profile.path) ? profile.path : [profile.path];
|
|
201
|
+
args = platform_1.isWindows ? profile.args : Array.isArray(profile.args) ? profile.args : undefined;
|
|
202
|
+
// icon = validateIcon(profile.icon);
|
|
203
|
+
}
|
|
204
|
+
// TODO: use (await this.variableResolver.resolveArray(originalPaths))
|
|
205
|
+
const paths = originalPaths.slice();
|
|
206
|
+
const validatedProfile = await this.validateProfilePaths(profileName, defaultProfileName, paths, args, {});
|
|
207
|
+
if (validatedProfile) {
|
|
208
|
+
validatedProfile.isAutoDetected = profile.isAutoDetected;
|
|
209
|
+
validatedProfile.icon = icon;
|
|
210
|
+
validatedProfile.color = profile.color;
|
|
211
|
+
resultProfiles.push(validatedProfile);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
this.logger.log('profile not validated', profileName, originalPaths);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return resultProfiles;
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
(0, tslib_1.__decorate)([
|
|
221
|
+
(0, di_1.Autowired)(ide_core_node_1.INodeLogger),
|
|
222
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
223
|
+
], TerminalProfileServiceNode.prototype, "logger", void 0);
|
|
224
|
+
TerminalProfileServiceNode = (0, tslib_1.__decorate)([
|
|
225
|
+
(0, di_1.Injectable)(),
|
|
226
|
+
(0, tslib_1.__metadata)("design:paramtypes", [])
|
|
227
|
+
], TerminalProfileServiceNode);
|
|
228
|
+
exports.TerminalProfileServiceNode = TerminalProfileServiceNode;
|
|
229
|
+
//# sourceMappingURL=terminal.profile.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.profile.service.js","sourceRoot":"","sources":["../../src/node/terminal.profile.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { RPCService } from '@opensumi/ide-connection';
|
|
2
2
|
import { IShellLaunchConfig, ITerminalServiceClient, INodePtyInstance, ITerminalError } from '../common';
|
|
3
3
|
import { WindowsShellType } from '../common/shell';
|
|
4
|
+
import { IDetectProfileOptions, ITerminalProfile } from '../common/profile';
|
|
5
|
+
import { OperatingSystem } from '@opensumi/ide-core-common/lib/platform';
|
|
4
6
|
/**
|
|
5
7
|
* this RPC target: NodePtyTerminalService
|
|
6
8
|
*/
|
|
@@ -18,6 +20,7 @@ interface IRPCTerminalService {
|
|
|
18
20
|
export declare class TerminalServiceClientImpl extends RPCService<IRPCTerminalService> implements ITerminalServiceClient {
|
|
19
21
|
private terminalMap;
|
|
20
22
|
private terminalService;
|
|
23
|
+
private terminalProfileService;
|
|
21
24
|
private clientId;
|
|
22
25
|
private logger;
|
|
23
26
|
setConnectionClientId(clientId: string): void;
|
|
@@ -27,7 +30,7 @@ export declare class TerminalServiceClientImpl extends RPCService<IRPCTerminalSe
|
|
|
27
30
|
signal?: number;
|
|
28
31
|
} | number, signal?: number): void;
|
|
29
32
|
ensureTerminal(terminalIdArr: string[]): boolean;
|
|
30
|
-
create2(id: string,
|
|
33
|
+
create2(id: string, cols: number, rows: number, launchConfig: IShellLaunchConfig): Promise<INodePtyInstance | undefined>;
|
|
31
34
|
$resolveWindowsShellPath(type: WindowsShellType): Promise<string | undefined>;
|
|
32
35
|
$resolveUnixShellPath(type: string): Promise<string | undefined>;
|
|
33
36
|
$resolveShellPath(paths: string[]): Promise<string | undefined>;
|
|
@@ -36,11 +39,15 @@ export declare class TerminalServiceClientImpl extends RPCService<IRPCTerminalSe
|
|
|
36
39
|
path: string;
|
|
37
40
|
type: WindowsShellType;
|
|
38
41
|
}>;
|
|
42
|
+
detectAvailableProfiles(options: IDetectProfileOptions): Promise<ITerminalProfile[]>;
|
|
43
|
+
getCodePlatformKey(): Promise<'osx' | 'windows' | 'linux'>;
|
|
44
|
+
getDefaultSystemShell(os: OperatingSystem): Promise<string>;
|
|
39
45
|
onMessage(id: string, msg: string): void;
|
|
40
46
|
resize(id: string, rows: number, cols: number): void;
|
|
41
47
|
disposeById(id: string): void;
|
|
42
48
|
getProcessId(id: string): number;
|
|
43
49
|
getShellName(id: string): string;
|
|
50
|
+
getOs(): OperatingSystem;
|
|
44
51
|
dispose(): void;
|
|
45
52
|
}
|
|
46
53
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.service.client.d.ts","sourceRoot":"","sources":["../../src/node/terminal.service.client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EACL,kBAAkB,EAElB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACf,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,gBAAgB,EAAmC,MAAM,iBAAiB,CAAC;AAGpF;;GAEG;AACH,UAAU,mBAAmB;IAC3B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED;;;GAGG;AACH,qBACa,yBAA0B,SAAQ,UAAU,CAAC,mBAAmB,CAAE,YAAW,sBAAsB;IAC9G,OAAO,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"terminal.service.client.d.ts","sourceRoot":"","sources":["../../src/node/terminal.service.client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EACL,kBAAkB,EAElB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACf,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,gBAAgB,EAAmC,MAAM,iBAAiB,CAAC;AAGpF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAM,MAAM,wCAAwC,CAAC;AAE7E;;GAEG;AACH,UAAU,mBAAmB;IAC3B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED;;;GAGG;AACH,qBACa,yBAA0B,SAAQ,UAAU,CAAC,mBAAmB,CAAE,YAAW,sBAAsB;IAC9G,OAAO,CAAC,WAAW,CAAuC;IAG1D,OAAO,CAAC,eAAe,CAAuB;IAG9C,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,MAAM,CAAc;IAE5B,qBAAqB,CAAC,QAAQ,EAAE,MAAM;IAKtC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAQtC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAS3G,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO;IAI1C,OAAO,CACX,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAsBlC,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAgB7E,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKhE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI/D,8BAA8B,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAc7D,iCAAiC,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAsBtF,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIpF,kBAAkB,IAAI,OAAO,CAAC,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;IAK1D,qBAAqB,CAAC,EAAE,EAAE,eAAe;IAI/C,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAUxC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAI7C,WAAW,CAAC,EAAE,EAAE,MAAM;IAItB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIhC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIhC,KAAK,IAAI,eAAe;IAIxB,OAAO;CAGR"}
|
|
@@ -8,6 +8,8 @@ const common_1 = require("../common");
|
|
|
8
8
|
const ide_core_node_1 = require("@opensumi/ide-core-node");
|
|
9
9
|
const shell_1 = require("../common/shell");
|
|
10
10
|
const shell_2 = require("./shell");
|
|
11
|
+
const terminal_profile_service_1 = require("./terminal.profile.service");
|
|
12
|
+
const platform_1 = require("@opensumi/ide-core-common/lib/platform");
|
|
11
13
|
/**
|
|
12
14
|
* 标准的后端服务,供前端调用
|
|
13
15
|
* 目前每个窗口会对应一个 TerminalServiceClientImpl 实例
|
|
@@ -41,19 +43,27 @@ let TerminalServiceClientImpl = class TerminalServiceClientImpl extends ide_conn
|
|
|
41
43
|
ensureTerminal(terminalIdArr) {
|
|
42
44
|
return this.terminalService.ensureClientTerminal(this.clientId, terminalIdArr);
|
|
43
45
|
}
|
|
44
|
-
async create2(id,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
46
|
+
async create2(id, cols, rows, launchConfig) {
|
|
47
|
+
try {
|
|
48
|
+
const pty = await this.terminalService.create2(id, cols, rows, launchConfig);
|
|
49
|
+
if (pty) {
|
|
50
|
+
this.terminalService.setClient(this.clientId, this);
|
|
51
|
+
this.logger.log(`client ${id} create ${pty} with options `, launchConfig);
|
|
52
|
+
this.terminalMap.set(id, pty);
|
|
53
|
+
return {
|
|
54
|
+
id,
|
|
55
|
+
pid: pty.pid,
|
|
56
|
+
proess: pty.process,
|
|
57
|
+
name: pty.parsedName,
|
|
58
|
+
shellPath: pty.launchConfig.executable,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.logger.log(`cannot create pty instance ${id} `, launchConfig);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
this.logger.error(`create pty instance error ${id}`, launchConfig, error);
|
|
57
67
|
}
|
|
58
68
|
}
|
|
59
69
|
async $resolveWindowsShellPath(type) {
|
|
@@ -110,6 +120,16 @@ let TerminalServiceClientImpl = class TerminalServiceClientImpl extends ide_conn
|
|
|
110
120
|
type: shell_1.WindowsShellType.cmd,
|
|
111
121
|
};
|
|
112
122
|
}
|
|
123
|
+
async detectAvailableProfiles(options) {
|
|
124
|
+
return await this.terminalProfileService.detectAvailableProfiles(options);
|
|
125
|
+
}
|
|
126
|
+
async getCodePlatformKey() {
|
|
127
|
+
// follow vscode
|
|
128
|
+
return this.getOs() === platform_1.OperatingSystem.Macintosh ? 'osx' : platform_1.OS === platform_1.OperatingSystem.Windows ? 'windows' : 'linux';
|
|
129
|
+
}
|
|
130
|
+
async getDefaultSystemShell(os) {
|
|
131
|
+
return await (0, shell_2.getSystemShell)(os);
|
|
132
|
+
}
|
|
113
133
|
onMessage(id, msg) {
|
|
114
134
|
const { data, params, method } = JSON.parse(msg);
|
|
115
135
|
if (method === 'resize') {
|
|
@@ -131,6 +151,9 @@ let TerminalServiceClientImpl = class TerminalServiceClientImpl extends ide_conn
|
|
|
131
151
|
getShellName(id) {
|
|
132
152
|
return this.terminalService.getShellName(id);
|
|
133
153
|
}
|
|
154
|
+
getOs() {
|
|
155
|
+
return platform_1.OS;
|
|
156
|
+
}
|
|
134
157
|
dispose() {
|
|
135
158
|
this.terminalService.closeClient(this.clientId);
|
|
136
159
|
}
|
|
@@ -139,6 +162,10 @@ let TerminalServiceClientImpl = class TerminalServiceClientImpl extends ide_conn
|
|
|
139
162
|
(0, di_1.Autowired)(common_1.ITerminalNodeService),
|
|
140
163
|
(0, tslib_1.__metadata)("design:type", Object)
|
|
141
164
|
], TerminalServiceClientImpl.prototype, "terminalService", void 0);
|
|
165
|
+
(0, tslib_1.__decorate)([
|
|
166
|
+
(0, di_1.Autowired)(terminal_profile_service_1.ITerminalProfileServiceNode),
|
|
167
|
+
(0, tslib_1.__metadata)("design:type", terminal_profile_service_1.TerminalProfileServiceNode)
|
|
168
|
+
], TerminalServiceClientImpl.prototype, "terminalProfileService", void 0);
|
|
142
169
|
(0, tslib_1.__decorate)([
|
|
143
170
|
(0, di_1.Autowired)(ide_core_node_1.INodeLogger),
|
|
144
171
|
(0, tslib_1.__metadata)("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.service.client.js","sourceRoot":"","sources":["../../src/node/terminal.service.client.ts"],"names":[],"mappings":";;;;AAAA,qCAAqD;AACrD,6DAAsD;AACtD,sCAMmB;AAEnB,2DAAsD;AACtD,2CAAoF;AACpF,
|
|
1
|
+
{"version":3,"file":"terminal.service.client.js","sourceRoot":"","sources":["../../src/node/terminal.service.client.ts"],"names":[],"mappings":";;;;AAAA,qCAAqD;AACrD,6DAAsD;AACtD,sCAMmB;AAEnB,2DAAsD;AACtD,2CAAoF;AACpF,mCAA2G;AAC3G,yEAAqG;AAErG,qEAA6E;AAU7E;;;GAGG;AAEH,IAAa,yBAAyB,GAAtC,MAAa,yBAA0B,SAAQ,2BAA+B;IAA9E;;QACU,gBAAW,GAA6B,IAAI,GAAG,EAAE,CAAC;IA6K5D,CAAC;IAhKC,qBAAqB,CAAC,QAAgB;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,aAAa,CAAC,EAAU,EAAE,IAAY;QACpC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;SACjC;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SAC7D;IACH,CAAC;IAED,WAAW,CAAC,EAAU,EAAE,IAAkE,EAAE,MAAe;QACzG,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;SAC3C;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SAC7D;IACH,CAAC;IAED,kBAAkB;IAClB,cAAc,CAAC,aAAuB;QACpC,OAAO,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,OAAO,CACX,EAAU,EACV,IAAY,EACZ,IAAY,EACZ,YAAgC;QAEhC,IAAI;YACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YAC7E,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACpD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,gBAAgB,EAAE,YAAY,CAAC,CAAC;gBAC1E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAO;oBACL,EAAE;oBACF,GAAG,EAAE,GAAG,CAAC,GAAG;oBACZ,MAAM,EAAE,GAAG,CAAC,OAAO;oBACnB,IAAI,EAAE,GAAG,CAAC,UAAU;oBACpB,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,UAAU;iBACvC,CAAC;aACH;iBAAM;gBACL,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;aACpE;SACF;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;SAC3E;IACH,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,IAAsB;QACnD,QAAQ,IAAI,EAAE;YACZ,KAAK,wBAAgB,CAAC,UAAU;gBAC9B,OAAO,uCAA+B,CAAC,UAAU,CAAC;YACpD,KAAK,wBAAgB,CAAC,GAAG;gBACvB,OAAO,uCAA+B,CAAC,GAAG,CAAC;YAC7C,KAAK,wBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,MAAM,IAAA,gCAAwB,EAAC,8BAAsB,CAAC,CAAC;gBACrE,OAAO,KAAK,CAAC;aACd;YACD;gBACE,sCAAsC;gBACtC,OAAO,SAAS,CAAC;SACpB;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,IAAY;QACtC,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;QAC9D,OAAO,MAAM,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAAe;QACrC,OAAO,MAAM,IAAA,gCAAwB,EAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,8BAA8B;QAClC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YACrB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;SAC1B;QAED,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACzC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,IAAI,EAAE;gBACR,OAAO,IAAI,CAAC;aACb;SACF;IACH,CAAC;IAED,KAAK,CAAC,iCAAiC;QACrC,IAAI,IAAI,GAAG,MAAM,IAAA,gCAAwB,EAAC,8BAAsB,CAAC,CAAC;QAClE,IAAI,IAAI,EAAE;YACR,OAAO;gBACL,IAAI;gBACJ,IAAI,EAAE,wBAAgB,CAAC,UAAU,CAAC;aACnC,CAAC;SACH;QACD,IAAI,GAAG,MAAM,IAAA,sBAAc,EAAC,uCAA+B,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,IAAI,EAAE;YACR,OAAO;gBACL,IAAI;gBACJ,IAAI,EAAE,wBAAgB,CAAC,UAAU;aAClC,CAAC;SACH;QAED,OAAO;YACL,IAAI,EAAE,uCAA+B,CAAC,GAAG;YACzC,IAAI,EAAE,wBAAgB,CAAC,GAAG;SAC3B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,OAA8B;QAC1D,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,gBAAgB;QAChB,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,0BAAe,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAE,KAAK,0BAAe,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACnH,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,EAAmB;QAC7C,OAAO,MAAM,IAAA,sBAAc,EAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,EAAU,EAAE,GAAW;QAC/B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjD,IAAI,MAAM,KAAK,QAAQ,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAC3C;aAAM;YACL,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;SAC1C;IACH,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,IAAY,EAAE,IAAY;QAC3C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK;QACH,OAAO,aAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;CACF,CAAA;AA1KC;IADC,IAAA,cAAS,EAAC,6BAAoB,CAAC;;kEACc;AAG9C;IADC,IAAA,cAAS,EAAC,sDAA2B,CAAC;2CACP,qDAA0B;yEAAC;AAK3D;IADC,IAAA,cAAS,EAAC,2BAAW,CAAC;;yDACK;AAZjB,yBAAyB;IADrC,IAAA,eAAU,GAAE;GACA,yBAAyB,CA8KrC;AA9KY,8DAAyB"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { IShellLaunchConfig } from '../common/pty';
|
|
1
|
+
import { IPtyProcess, IShellLaunchConfig } from '../common/pty';
|
|
3
2
|
import { ITerminalNodeService, ITerminalServiceClient } from '../common';
|
|
4
3
|
/**
|
|
5
4
|
* terminal service 的具体实现
|
|
@@ -7,11 +6,11 @@ import { ITerminalNodeService, ITerminalServiceClient } from '../common';
|
|
|
7
6
|
*/
|
|
8
7
|
export declare class TerminalServiceImpl implements ITerminalNodeService {
|
|
9
8
|
static TerminalPtyCloseThreshold: number;
|
|
10
|
-
private
|
|
9
|
+
private terminalProcessMap;
|
|
11
10
|
private clientTerminalMap;
|
|
12
11
|
private clientTerminalThresholdMap;
|
|
13
|
-
private ptyService;
|
|
14
12
|
private serviceClientMap;
|
|
13
|
+
private injector;
|
|
15
14
|
private logger;
|
|
16
15
|
private appConfig;
|
|
17
16
|
private batchedPtyDataMap;
|
|
@@ -21,9 +20,10 @@ export declare class TerminalServiceImpl implements ITerminalNodeService {
|
|
|
21
20
|
closeClient(clientId: string): void;
|
|
22
21
|
disposeClient(clientId: string): void;
|
|
23
22
|
private flushPtyData;
|
|
24
|
-
create2(id: string,
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
create2(id: string, cols: IShellLaunchConfig): Promise<IPtyProcess | undefined>;
|
|
24
|
+
create2(id: string, cols: number, rows: number, options: IShellLaunchConfig): Promise<IPtyProcess | undefined>;
|
|
25
|
+
onMessage(id: string, msg: string): void;
|
|
26
|
+
resize(id: string, rows: number, cols: number): void;
|
|
27
27
|
getShellName(id: string): string;
|
|
28
28
|
getProcessId(id: string): number;
|
|
29
29
|
disposeById(id: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.service.d.ts","sourceRoot":"","sources":["../../src/node/terminal.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"terminal.service.d.ts","sourceRoot":"","sources":["../../src/node/terminal.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAsB,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAS7F;;;GAGG;AACH,qBACa,mBAAoB,YAAW,oBAAoB;IAC9D,MAAM,CAAC,yBAAyB,SAAa;IAE7C,OAAO,CAAC,kBAAkB,CAAsC;IAChE,OAAO,CAAC,iBAAiB,CAAmD;IAC5E,OAAO,CAAC,0BAA0B,CAA0C;IAE5E,OAAO,CAAC,gBAAgB,CAAkD;IAG1E,OAAO,CAAC,QAAQ,CAAW;IAG3B,OAAO,CAAC,MAAM,CAAc;IAG5B,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,mBAAmB,CAA0C;IAE9D,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB;IAI1D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE;IAS9D,WAAW,CAAC,QAAQ,EAAE,MAAM;IAa5B,aAAa,CAAC,QAAQ,EAAE,MAAM;IAYrC,OAAO,CAAC,YAAY;IASP,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAC/E,OAAO,CAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAsG5B,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IASjC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IASpD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAQhC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAQhC,WAAW,CAAC,EAAE,EAAE,MAAM;IAStB,OAAO;IAMP,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -5,6 +5,7 @@ exports.TerminalServiceImpl = void 0;
|
|
|
5
5
|
const tslib_1 = require("tslib");
|
|
6
6
|
const di_1 = require("@opensumi/di");
|
|
7
7
|
const pty_1 = require("./pty");
|
|
8
|
+
const common_1 = require("../common");
|
|
8
9
|
const ide_core_node_1 = require("@opensumi/ide-core-node");
|
|
9
10
|
// ref: https://github.com/vercel/hyper/blob/4c90d7555c79fb6dc438fa9549f1d0ef7c7a5aa7/app/session.ts#L27-L32
|
|
10
11
|
// 批处理字符最大长度
|
|
@@ -17,7 +18,7 @@ const BATCH_DURATION_MS = 16;
|
|
|
17
18
|
*/
|
|
18
19
|
let TerminalServiceImpl = TerminalServiceImpl_1 = class TerminalServiceImpl {
|
|
19
20
|
constructor() {
|
|
20
|
-
this.
|
|
21
|
+
this.terminalProcessMap = new Map();
|
|
21
22
|
this.clientTerminalMap = new Map();
|
|
22
23
|
this.clientTerminalThresholdMap = new Map();
|
|
23
24
|
this.serviceClientMap = new Map();
|
|
@@ -35,7 +36,6 @@ let TerminalServiceImpl = TerminalServiceImpl_1 = class TerminalServiceImpl {
|
|
|
35
36
|
return this.clientTerminalMap.has(clientId);
|
|
36
37
|
}
|
|
37
38
|
closeClient(clientId) {
|
|
38
|
-
// TODO: 实现关闭客户端,调用客户端的 closeClient 方法
|
|
39
39
|
const closeTimer = global.setTimeout(() => {
|
|
40
40
|
this.disposeClient(clientId);
|
|
41
41
|
this.logger.debug(`删除 clientId ${clientId} 窗口的 pty 进程`);
|
|
@@ -46,9 +46,9 @@ let TerminalServiceImpl = TerminalServiceImpl_1 = class TerminalServiceImpl {
|
|
|
46
46
|
disposeClient(clientId) {
|
|
47
47
|
const terminalMap = this.clientTerminalMap.get(clientId);
|
|
48
48
|
if (terminalMap) {
|
|
49
|
-
terminalMap.forEach((
|
|
50
|
-
this.
|
|
51
|
-
|
|
49
|
+
terminalMap.forEach((t, id) => {
|
|
50
|
+
this.terminalProcessMap.delete(id);
|
|
51
|
+
t.kill();
|
|
52
52
|
});
|
|
53
53
|
this.clientTerminalMap.delete(clientId);
|
|
54
54
|
}
|
|
@@ -60,19 +60,30 @@ let TerminalServiceImpl = TerminalServiceImpl_1 = class TerminalServiceImpl {
|
|
|
60
60
|
const serviceClient = this.serviceClientMap.get(clientId);
|
|
61
61
|
serviceClient.clientMessage(sessionId, ptyData);
|
|
62
62
|
}
|
|
63
|
-
async create2(id,
|
|
63
|
+
async create2(id, _cols, _rows, _launchConfig) {
|
|
64
64
|
var _a;
|
|
65
65
|
const clientId = id.split('|')[0];
|
|
66
|
-
let
|
|
66
|
+
let ptyService;
|
|
67
|
+
let cols = _cols;
|
|
68
|
+
let rows = _rows;
|
|
69
|
+
let launchConfig = _launchConfig;
|
|
70
|
+
if (!(typeof cols === 'number')) {
|
|
71
|
+
launchConfig = cols;
|
|
72
|
+
cols = launchConfig.cols;
|
|
73
|
+
rows = launchConfig.rows;
|
|
74
|
+
if (launchConfig.shellPath) {
|
|
75
|
+
launchConfig.executable = launchConfig.shellPath;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
67
78
|
try {
|
|
68
|
-
|
|
69
|
-
this.
|
|
79
|
+
ptyService = this.injector.get(pty_1.PtyService, [id, launchConfig, cols, rows]);
|
|
80
|
+
this.terminalProcessMap.set(id, ptyService);
|
|
70
81
|
// ref: https://hyper.is/blog
|
|
71
82
|
// 合并 pty 输出的数据,16ms 后发送给客户端,如
|
|
72
83
|
// 果在 16ms 内没有收到新的数据,或短时间内数据
|
|
73
84
|
// 超过 BATCH_MAX_SIZE 限定的长度,则立即发送缓
|
|
74
85
|
// 存的数据,避免因为输出较多时阻塞 RPC 通信
|
|
75
|
-
|
|
86
|
+
ptyService.onData((chunk) => {
|
|
76
87
|
if (this.serviceClientMap.has(clientId)) {
|
|
77
88
|
if (!this.batchedPtyDataMap.has(id)) {
|
|
78
89
|
this.batchedPtyDataMap.set(id, '');
|
|
@@ -95,7 +106,7 @@ let TerminalServiceImpl = TerminalServiceImpl_1 = class TerminalServiceImpl {
|
|
|
95
106
|
this.logger.warn(`terminal: pty ${clientId} on data not found`);
|
|
96
107
|
}
|
|
97
108
|
});
|
|
98
|
-
|
|
109
|
+
ptyService.onExit(({ exitCode, signal }) => {
|
|
99
110
|
this.logger.debug(`Terminal process exit (instanceId: ${id}) with code ${exitCode}`);
|
|
100
111
|
if (this.serviceClientMap.has(clientId)) {
|
|
101
112
|
const serviceClient = this.serviceClientMap.get(clientId);
|
|
@@ -108,23 +119,30 @@ let TerminalServiceImpl = TerminalServiceImpl_1 = class TerminalServiceImpl {
|
|
|
108
119
|
this.logger.warn(`terminal: pty ${clientId} on data not found`);
|
|
109
120
|
}
|
|
110
121
|
});
|
|
122
|
+
const error = await ptyService.start();
|
|
123
|
+
if (error) {
|
|
124
|
+
this.logger.error(`Terminal process start error (instanceId: ${id})`, error);
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
111
127
|
if (!this.clientTerminalMap.has(clientId)) {
|
|
112
128
|
this.clientTerminalMap.set(clientId, new Map());
|
|
113
129
|
}
|
|
114
|
-
(_a = this.clientTerminalMap.get(clientId)) === null || _a === void 0 ? void 0 : _a.set(id,
|
|
130
|
+
(_a = this.clientTerminalMap.get(clientId)) === null || _a === void 0 ? void 0 : _a.set(id, ptyService);
|
|
115
131
|
}
|
|
116
132
|
catch (error) {
|
|
117
|
-
this.logger.error(`${id} create terminal error: ${error}, options: ${JSON.stringify(
|
|
133
|
+
this.logger.error(`${id} create terminal error: ${JSON.stringify(error)}, options: ${JSON.stringify(launchConfig)}`);
|
|
118
134
|
if (this.serviceClientMap.has(clientId)) {
|
|
119
135
|
const serviceClient = this.serviceClientMap.get(clientId);
|
|
120
136
|
serviceClient.closeClient(id, {
|
|
121
137
|
id,
|
|
122
|
-
message: error.message,
|
|
138
|
+
message: error === null || error === void 0 ? void 0 : error.message,
|
|
139
|
+
type: common_1.ETerminalErrorType.CREATE_FAIL,
|
|
123
140
|
stopped: true,
|
|
141
|
+
launchConfig,
|
|
124
142
|
});
|
|
125
143
|
}
|
|
126
144
|
}
|
|
127
|
-
return
|
|
145
|
+
return ptyService === null || ptyService === void 0 ? void 0 : ptyService.pty;
|
|
128
146
|
}
|
|
129
147
|
onMessage(id, msg) {
|
|
130
148
|
const terminal = this.getTerminal(id);
|
|
@@ -132,28 +150,28 @@ let TerminalServiceImpl = TerminalServiceImpl_1 = class TerminalServiceImpl {
|
|
|
132
150
|
this.logger.warn(`terminal ${id} onMessage not found`, terminal);
|
|
133
151
|
return;
|
|
134
152
|
}
|
|
135
|
-
terminal.
|
|
153
|
+
terminal.onMessage(msg);
|
|
136
154
|
}
|
|
137
155
|
resize(id, rows, cols) {
|
|
138
156
|
const terminal = this.getTerminal(id);
|
|
139
157
|
if (!terminal) {
|
|
140
158
|
return;
|
|
141
159
|
}
|
|
142
|
-
|
|
160
|
+
terminal.resize(rows, cols);
|
|
143
161
|
}
|
|
144
162
|
getShellName(id) {
|
|
145
163
|
const terminal = this.getTerminal(id);
|
|
146
164
|
if (!terminal) {
|
|
147
165
|
return 'invalid terminal';
|
|
148
166
|
}
|
|
149
|
-
return terminal.
|
|
167
|
+
return terminal.getShellName();
|
|
150
168
|
}
|
|
151
169
|
getProcessId(id) {
|
|
152
170
|
const terminal = this.getTerminal(id);
|
|
153
171
|
if (!terminal) {
|
|
154
172
|
return -1;
|
|
155
173
|
}
|
|
156
|
-
return terminal.
|
|
174
|
+
return terminal.getPid();
|
|
157
175
|
}
|
|
158
176
|
disposeById(id) {
|
|
159
177
|
const terminal = this.getTerminal(id);
|
|
@@ -168,14 +186,14 @@ let TerminalServiceImpl = TerminalServiceImpl_1 = class TerminalServiceImpl {
|
|
|
168
186
|
});
|
|
169
187
|
}
|
|
170
188
|
getTerminal(id) {
|
|
171
|
-
return this.
|
|
189
|
+
return this.terminalProcessMap.get(id);
|
|
172
190
|
}
|
|
173
191
|
};
|
|
174
192
|
TerminalServiceImpl.TerminalPtyCloseThreshold = 10 * 1000;
|
|
175
193
|
(0, tslib_1.__decorate)([
|
|
176
|
-
(0, di_1.Autowired)(
|
|
177
|
-
(0, tslib_1.__metadata)("design:type",
|
|
178
|
-
], TerminalServiceImpl.prototype, "
|
|
194
|
+
(0, di_1.Autowired)(di_1.INJECTOR_TOKEN),
|
|
195
|
+
(0, tslib_1.__metadata)("design:type", di_1.Injector)
|
|
196
|
+
], TerminalServiceImpl.prototype, "injector", void 0);
|
|
179
197
|
(0, tslib_1.__decorate)([
|
|
180
198
|
(0, di_1.Autowired)(ide_core_node_1.INodeLogger),
|
|
181
199
|
(0, tslib_1.__metadata)("design:type", Object)
|