@theia/core 1.72.0-next.59 → 1.72.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/README.md +6 -6
- package/i18n/nls.cs.json +93 -44
- package/i18n/nls.de.json +93 -44
- package/i18n/nls.es.json +93 -44
- package/i18n/nls.fr.json +93 -44
- package/i18n/nls.hu.json +93 -44
- package/i18n/nls.it.json +93 -44
- package/i18n/nls.ja.json +93 -44
- package/i18n/nls.json +93 -44
- package/i18n/nls.ko.json +93 -44
- package/i18n/nls.pl.json +93 -44
- package/i18n/nls.pt-br.json +93 -44
- package/i18n/nls.ru.json +93 -44
- package/i18n/nls.tr.json +93 -44
- package/i18n/nls.zh-cn.json +93 -44
- package/i18n/nls.zh-tw.json +93 -44
- package/lib/browser/catalog.json +13 -0
- package/lib/common/shell-quoting.d.ts +92 -0
- package/lib/common/shell-quoting.d.ts.map +1 -0
- package/lib/common/shell-quoting.js +146 -0
- package/lib/common/shell-quoting.js.map +1 -0
- package/lib/common/shell-quoting.spec.d.ts +2 -0
- package/lib/common/shell-quoting.spec.d.ts.map +1 -0
- package/lib/common/shell-quoting.spec.js +171 -0
- package/lib/common/shell-quoting.spec.js.map +1 -0
- package/lib/node/process-utils.d.ts +1 -0
- package/lib/node/process-utils.d.ts.map +1 -1
- package/lib/node/process-utils.js +15 -9
- package/lib/node/process-utils.js.map +1 -1
- package/lib/node/process-utils.spec.js +41 -0
- package/lib/node/process-utils.spec.js.map +1 -1
- package/package.json +6 -6
- package/src/common/i18n/nls.metadata.json +3417 -1177
- package/src/common/shell-quoting.spec.ts +176 -0
- package/src/common/shell-quoting.ts +236 -0
- package/src/node/process-utils.spec.ts +48 -0
- package/src/node/process-utils.ts +15 -8
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2020 Ericsson and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.PowershellQuotingFunctions = exports.CmdQuotingFunctions = exports.BashQuotingFunctions = void 0;
|
|
19
|
+
exports.createShellCommandLine = createShellCommandLine;
|
|
20
|
+
exports.escapeForShell = escapeForShell;
|
|
21
|
+
/**
|
|
22
|
+
* Converts a list of args into an escaped shell command.
|
|
23
|
+
*
|
|
24
|
+
* There are two main use cases when handling command/arguments for a shell:
|
|
25
|
+
* 1. User already wrote the escaped commandline, then just use that.
|
|
26
|
+
* 2. User wants a specific process to be invoked with some arguments.
|
|
27
|
+
*
|
|
28
|
+
* The `createShellCommandLine` function is useful for the latter.
|
|
29
|
+
*
|
|
30
|
+
* @param args Standard list of spawn/exec arguments, first item is the command.
|
|
31
|
+
* @param quotingFunctions Collection of functions to process arguments.
|
|
32
|
+
*/
|
|
33
|
+
function createShellCommandLine(args, quotingFunctions) {
|
|
34
|
+
return args.map(arg => escapeForShell(arg, quotingFunctions)).join(' ');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Escape (or quote) a given input.
|
|
38
|
+
*
|
|
39
|
+
* @param arg Input to escape.
|
|
40
|
+
* @param quotingFunctions Collection of functions to process the given `arg`.
|
|
41
|
+
* @param quotingType Override the quoting type specified by the given `arg`.
|
|
42
|
+
*/
|
|
43
|
+
function escapeForShell(arg, quotingFunctions, quotingType) {
|
|
44
|
+
let value;
|
|
45
|
+
let quoting = quotingType;
|
|
46
|
+
if (typeof arg === 'string') {
|
|
47
|
+
if (!quoting) {
|
|
48
|
+
return arg;
|
|
49
|
+
}
|
|
50
|
+
value = arg;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
if (!quoting) {
|
|
54
|
+
quoting = arg.quoting;
|
|
55
|
+
}
|
|
56
|
+
value = arg.value;
|
|
57
|
+
}
|
|
58
|
+
if (quotingFunctions && typeof quotingFunctions[quoting] === 'function') {
|
|
59
|
+
return quotingFunctions[quoting](value);
|
|
60
|
+
}
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
exports.BashQuotingFunctions = {
|
|
64
|
+
characters: {
|
|
65
|
+
needQuotes: '()',
|
|
66
|
+
escape: '\\',
|
|
67
|
+
strong: '\'',
|
|
68
|
+
weak: '"',
|
|
69
|
+
},
|
|
70
|
+
escape(arg) {
|
|
71
|
+
return arg
|
|
72
|
+
.replace(/[\s\\|(){}<>$&;"']/g, '\\$&');
|
|
73
|
+
},
|
|
74
|
+
strong(arg) {
|
|
75
|
+
// ('+) becomes ('"'+"')
|
|
76
|
+
return `'${arg
|
|
77
|
+
.replace(/'+/g, '\'"$&"\'')}'`;
|
|
78
|
+
},
|
|
79
|
+
weak(arg) {
|
|
80
|
+
return `"${arg
|
|
81
|
+
// Escape escape-characters.
|
|
82
|
+
.replace(/\\"/g, '\\\\"')
|
|
83
|
+
// Escape user-specified double-quotes.
|
|
84
|
+
.replace(/"/g, '\\"')
|
|
85
|
+
// Escape trailing (\), we don't want the user to escape our last quote.
|
|
86
|
+
.replace(/\\$/g, '\\\\')}"`;
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
exports.CmdQuotingFunctions = {
|
|
90
|
+
characters: {
|
|
91
|
+
weak: '"',
|
|
92
|
+
},
|
|
93
|
+
escape(arg) {
|
|
94
|
+
return arg
|
|
95
|
+
// Escape forbidden characters (see: cmd /?).
|
|
96
|
+
.replace(/[%&<>()@^|]/g, '^$&')
|
|
97
|
+
// Some characters must be escaped using `\`.
|
|
98
|
+
.replace(/[\\"]/g, '\\$&')
|
|
99
|
+
// Double-quote whitespaces, else we cannot escape it.
|
|
100
|
+
.replace(/\s+/g, '"$&"');
|
|
101
|
+
},
|
|
102
|
+
strong(arg) {
|
|
103
|
+
return this.weak(arg)
|
|
104
|
+
// Try to prevent variable expansion.
|
|
105
|
+
.replace(/%/g, '"%"');
|
|
106
|
+
},
|
|
107
|
+
weak(arg) {
|
|
108
|
+
return `"${arg
|
|
109
|
+
// Escape double quotes.
|
|
110
|
+
.replace(/\\"/g, '\\\\"')
|
|
111
|
+
.replace(/"/g, '\\"')
|
|
112
|
+
// Escape forbidden characters (see: cmd /?)
|
|
113
|
+
.replace(/[&<>()@^|]/g, '^$&')
|
|
114
|
+
// Escape trailing backslash, we don't want the user to escape our last quote.
|
|
115
|
+
.replace(/\\$/g, '\\\\')
|
|
116
|
+
// Escape line returns
|
|
117
|
+
.replace(/\r?\n/g, '^$&')}"`;
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
exports.PowershellQuotingFunctions = {
|
|
121
|
+
characters: {
|
|
122
|
+
needQuotes: '()',
|
|
123
|
+
escape: '`',
|
|
124
|
+
strong: '\'',
|
|
125
|
+
weak: '"',
|
|
126
|
+
},
|
|
127
|
+
escape(arg) {
|
|
128
|
+
return arg.replace(/[`|{}()<>;"' ]/g, '`$&');
|
|
129
|
+
},
|
|
130
|
+
strong(arg) {
|
|
131
|
+
// In powershell, one must write ('') for a single quote to be displayed
|
|
132
|
+
// within a single quoted string.
|
|
133
|
+
return `'${arg
|
|
134
|
+
.replace(/'/g, '\'\'')}'`;
|
|
135
|
+
},
|
|
136
|
+
weak(arg) {
|
|
137
|
+
return `"${arg
|
|
138
|
+
// Escape escape-characters.
|
|
139
|
+
.replace(/`"/g, '``"')
|
|
140
|
+
// Escape user-specified backticks.
|
|
141
|
+
.replace(/"/g, '`"')
|
|
142
|
+
// Escape trailing (`), we don't want the user to escape our last quote.
|
|
143
|
+
.replace(/`$/g, '``')}"`;
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
//# sourceMappingURL=shell-quoting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-quoting.js","sourceRoot":"","sources":["../../src/common/shell-quoting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-quoting.spec.d.ts","sourceRoot":"","sources":["../../src/common/shell-quoting.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2020 Ericsson and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const chai_1 = require("chai");
|
|
19
|
+
const shell_quoting_1 = require("./shell-quoting");
|
|
20
|
+
describe('Shell arguments escaping:', () => {
|
|
21
|
+
// Procedurally execute tests from this list of data.
|
|
22
|
+
const testData = {
|
|
23
|
+
bash: {
|
|
24
|
+
// https://www.gnu.org/software/bash/manual/html_node/Quoting.html
|
|
25
|
+
quotingFunctions: shell_quoting_1.BashQuotingFunctions,
|
|
26
|
+
data: {
|
|
27
|
+
["escape" /* ShellQuoting.Escape */]: [
|
|
28
|
+
{ input: 'abc', expected: 'abc' },
|
|
29
|
+
{ input: 'ab c', expected: 'ab\\ c' },
|
|
30
|
+
{ input: 'ab"c', expected: 'ab\\"c' },
|
|
31
|
+
{ input: 'ab\'c', expected: 'ab\\\'c' },
|
|
32
|
+
{ input: 'ab\\ c\\', expected: 'ab\\\\\\ c\\\\' },
|
|
33
|
+
{
|
|
34
|
+
input: 'setTimeout(() => { console.log(1, "2\'3"); }, 100)',
|
|
35
|
+
expected: 'setTimeout\\(\\(\\)\\ =\\>\\ \\{\\ console.log\\(1,\\ \\"2\\\'3\\"\\)\\;\\ \\},\\ 100\\)',
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
["strong" /* ShellQuoting.Strong */]: [
|
|
39
|
+
{ input: 'abc', expected: '\'abc\'' },
|
|
40
|
+
{ input: 'ab c', expected: '\'ab c\'' },
|
|
41
|
+
{ input: 'ab"c', expected: '\'ab"c\'' },
|
|
42
|
+
{ input: 'ab\'c', expected: '\'ab\'"\'"\'c\'' },
|
|
43
|
+
{ input: 'ab\\ c\\', expected: '\'ab\\ c\\\'' },
|
|
44
|
+
{
|
|
45
|
+
input: 'setTimeout(() => { console.log(1, "2\'3"); }, 100)',
|
|
46
|
+
expected: '\'setTimeout(() => { console.log(1, "2\'"\'"\'3"); }, 100)\'',
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
["weak" /* ShellQuoting.Weak */]: [
|
|
50
|
+
{ input: 'abc', expected: '"abc"' },
|
|
51
|
+
{ input: 'ab c', expected: '"ab c"' },
|
|
52
|
+
{ input: 'ab"c', expected: '"ab\\"c"' },
|
|
53
|
+
{ input: 'ab\'c', expected: '"ab\'c"' },
|
|
54
|
+
{ input: 'ab\\ c\\', expected: '"ab\\ c\\\\"' },
|
|
55
|
+
{
|
|
56
|
+
input: 'setTimeout(() => { console.log(1, "2\'3"); }, 100)',
|
|
57
|
+
expected: '"setTimeout(() => { console.log(1, \\"2\'3\\"); }, 100)"',
|
|
58
|
+
},
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
cmd: {
|
|
63
|
+
// https://ss64.com/nt/syntax-esc.html
|
|
64
|
+
quotingFunctions: shell_quoting_1.CmdQuotingFunctions,
|
|
65
|
+
data: {
|
|
66
|
+
["escape" /* ShellQuoting.Escape */]: [
|
|
67
|
+
{ input: 'abc', expected: 'abc' },
|
|
68
|
+
{ input: 'ab c', expected: 'ab" "c' },
|
|
69
|
+
{ input: 'ab"c', expected: 'ab\\"c' },
|
|
70
|
+
{ input: 'ab\'c', expected: 'ab\'c' },
|
|
71
|
+
{ input: 'ab^ c^', expected: 'ab^^" "c^^' },
|
|
72
|
+
{
|
|
73
|
+
input: 'setTimeout(() => { console.log(1, "2\'3"); }, 100)',
|
|
74
|
+
expected: 'setTimeout^(^(^)" "=^>" "{" "console.log^(1," "\\"2\'3\\"^);" "}," "100^)',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
input: 'console.log("%PATH%")',
|
|
78
|
+
expected: 'console.log^(\\"^%PATH^%\\"^)',
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
["strong" /* ShellQuoting.Strong */]: [
|
|
82
|
+
{ input: 'abc', expected: '"abc"' },
|
|
83
|
+
{ input: 'ab c', expected: '"ab c"' },
|
|
84
|
+
{ input: 'ab"c', expected: '"ab\\"c"' },
|
|
85
|
+
{ input: 'ab\'c', expected: '"ab\'c"' },
|
|
86
|
+
{ input: 'ab^ c^', expected: '"ab^^ c^^"' },
|
|
87
|
+
{
|
|
88
|
+
input: 'setTimeout(() => { console.log(1, "2\'3"); }, 100)',
|
|
89
|
+
expected: '"setTimeout^(^(^) =^> { console.log^(1, \\"2\'3\\"^); }, 100^)"',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
input: 'console.log("%PATH%")',
|
|
93
|
+
expected: '"console.log^(\\""%"PATH"%"\\"^)"',
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
["weak" /* ShellQuoting.Weak */]: [
|
|
97
|
+
{ input: 'abc', expected: '"abc"' },
|
|
98
|
+
{ input: 'ab c', expected: '"ab c"' },
|
|
99
|
+
{ input: 'ab"c', expected: '"ab\\"c"' },
|
|
100
|
+
{ input: 'ab\'c', expected: '"ab\'c"' },
|
|
101
|
+
{ input: 'ab^ c^', expected: '"ab^^ c^^"' },
|
|
102
|
+
{
|
|
103
|
+
input: 'setTimeout(() => { console.log(1, "2\'3"); }, 100)',
|
|
104
|
+
expected: '"setTimeout^(^(^) =^> { console.log^(1, \\"2\'3\\"^); }, 100^)"',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
input: 'console.log("%PATH%")',
|
|
108
|
+
expected: '"console.log^(\\"%PATH%\\"^)"',
|
|
109
|
+
},
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
powershell: {
|
|
114
|
+
// https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-6
|
|
115
|
+
quotingFunctions: shell_quoting_1.PowershellQuotingFunctions,
|
|
116
|
+
data: {
|
|
117
|
+
["escape" /* ShellQuoting.Escape */]: [
|
|
118
|
+
{ input: 'abc', expected: 'abc' },
|
|
119
|
+
{ input: 'ab c', expected: 'ab` c' },
|
|
120
|
+
{ input: 'ab"c', expected: 'ab`"c' },
|
|
121
|
+
{ input: 'ab\'c', expected: 'ab`\'c' },
|
|
122
|
+
{ input: 'ab` c`', expected: 'ab``` c``' },
|
|
123
|
+
{
|
|
124
|
+
input: 'setTimeout(() => { console.log(1, "2\'3"); }, 100)',
|
|
125
|
+
expected: 'setTimeout`(`(`)` =`>` `{` console.log`(1,` `"2`\'3`"`)`;` `},` 100`)',
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
["strong" /* ShellQuoting.Strong */]: [
|
|
129
|
+
{ input: 'abc', expected: '\'abc\'' },
|
|
130
|
+
{ input: 'ab c', expected: '\'ab c\'' },
|
|
131
|
+
{ input: 'ab"c', expected: '\'ab"c\'' },
|
|
132
|
+
{ input: 'ab\'c', expected: '\'ab\'\'c\'' },
|
|
133
|
+
{ input: 'ab` c`', expected: '\'ab` c`\'' },
|
|
134
|
+
{
|
|
135
|
+
input: 'setTimeout(() => { console.log(1, "2\'3"); }, 100)',
|
|
136
|
+
expected: '\'setTimeout(() => { console.log(1, "2\'\'3"); }, 100)\'',
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
["weak" /* ShellQuoting.Weak */]: [
|
|
140
|
+
{ input: 'abc', expected: '"abc"' },
|
|
141
|
+
{ input: 'ab c', expected: '"ab c"' },
|
|
142
|
+
{ input: 'ab"c', expected: '"ab`"c"' },
|
|
143
|
+
{ input: 'ab\'c', expected: '"ab\'c"' },
|
|
144
|
+
{ input: 'ab` c`', expected: '"ab` c``"' },
|
|
145
|
+
{
|
|
146
|
+
input: 'setTimeout(() => { console.log(1, "2\'3"); }, 100)',
|
|
147
|
+
expected: '"setTimeout(() => { console.log(1, `"2\'3`"); }, 100)"',
|
|
148
|
+
},
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
// Iter through each runtime (bash/cmd/powershell):
|
|
154
|
+
for (const runtime of Object.keys(testData)) {
|
|
155
|
+
const testInfo = testData[runtime];
|
|
156
|
+
// Get all quoting types (escape/strong/weak):
|
|
157
|
+
for (const quotingType of Object.keys(testInfo.data)) {
|
|
158
|
+
const testInput = testInfo.data[quotingType];
|
|
159
|
+
// Run the test for each input:
|
|
160
|
+
it(`${runtime}/${quotingType}`, () => {
|
|
161
|
+
for (const test of testInput) {
|
|
162
|
+
(0, chai_1.expect)((0, shell_quoting_1.escapeForShell)({
|
|
163
|
+
quoting: quotingType,
|
|
164
|
+
value: test.input,
|
|
165
|
+
}, testInfo.quotingFunctions)).equal(test.expected);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=shell-quoting.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-quoting.spec.js","sourceRoot":"","sources":["../../src/common/shell-quoting.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export declare class ProcessUtils {
|
|
|
6
6
|
terminateProcessTree(ppid: number): void;
|
|
7
7
|
protected winTerminateProcessTree(ppid: number): void;
|
|
8
8
|
protected unixTerminateProcessTree(ppid: number): void;
|
|
9
|
+
protected unixKill(pid: number): void;
|
|
9
10
|
protected unixGetPGID(pid: number): number;
|
|
10
11
|
protected unixGetChildrenRecursive(ppid: number): Set<number>;
|
|
11
12
|
protected spawnSync(file: string, argv: string[], options?: cp.SpawnSyncOptions): cp.SpawnSyncReturns<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../../src/node/process-utils.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AAGpC;;GAEG;AACH,qBACa,YAAY;IAErB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxC,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYrD,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../../src/node/process-utils.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AAGpC;;GAEG;AACH,qBACa,YAAY;IAErB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxC,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYrD,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAgBtD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAYrC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAK1C,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IA4B7D,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;CAUhH"}
|
|
@@ -46,22 +46,28 @@ let ProcessUtils = class ProcessUtils {
|
|
|
46
46
|
for (const pid of this.unixGetChildrenRecursive(ppid)) {
|
|
47
47
|
// Prevent killing the current process:
|
|
48
48
|
if (pid !== process.pid) {
|
|
49
|
-
|
|
50
|
-
try {
|
|
51
|
-
process.kill(pid);
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
console.error(error);
|
|
55
|
-
}
|
|
49
|
+
this.unixKill(pid);
|
|
56
50
|
}
|
|
57
51
|
}
|
|
58
52
|
if (ppid === this.unixGetPGID(ppid)) {
|
|
59
53
|
// When a process pgid === pid this means the the process is a group leader.
|
|
60
54
|
// We can then kill every process part of its group by doing `kill(-pgid)`.
|
|
61
55
|
// This can catch leaked processes under `init` that are still part of the group.
|
|
62
|
-
|
|
56
|
+
this.unixKill(-ppid);
|
|
57
|
+
}
|
|
58
|
+
this.unixKill(ppid);
|
|
59
|
+
}
|
|
60
|
+
unixKill(pid) {
|
|
61
|
+
try {
|
|
62
|
+
process.kill(pid);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
// ESRCH means the process is already gone, which is the goal here. Log
|
|
66
|
+
// anything else but keep going so the rest of the tree is still killed.
|
|
67
|
+
if (error?.code !== 'ESRCH') {
|
|
68
|
+
console.error(`[${pid}] failed to kill`, error);
|
|
69
|
+
}
|
|
63
70
|
}
|
|
64
|
-
process.kill(ppid);
|
|
65
71
|
}
|
|
66
72
|
unixGetPGID(pid) {
|
|
67
73
|
const { stdout } = this.spawnSync('ps', ['-p', pid.toString(10), '-o', 'pgid=']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../../src/node/process-utils.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,oCAAoC;AACpC,yCAAuC;AAEvC;;GAEG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAY;IAErB,oBAAoB,CAAC,IAAY;QAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IAES,uBAAuB,CAAC,IAAY;QAC1C,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3G,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,KAAK,CAAC;QACvB,CAAC;QACD,wFAAwF;QACxF,0DAA0D;QAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,MAAM,YAAY,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzH,CAAC;IACL,CAAC;IAES,wBAAwB,CAAC,IAAY;QAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,uCAAuC;YACvC,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;gBACtB,
|
|
1
|
+
{"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../../src/node/process-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,5 +41,46 @@ describe('ProcessUtils', () => {
|
|
|
41
41
|
const pids = coreProcessManager['unixGetChildrenRecursive'](2);
|
|
42
42
|
(0, chai_1.expect)(Array.from(pids)).members([40, 5, 6, 7]);
|
|
43
43
|
});
|
|
44
|
+
describe('#unixTerminateProcessTree', () => {
|
|
45
|
+
let originalKill;
|
|
46
|
+
let originalConsoleError;
|
|
47
|
+
let loggedErrors;
|
|
48
|
+
function throwingKill(code) {
|
|
49
|
+
return (() => {
|
|
50
|
+
const error = new Error(`kill ${code}`);
|
|
51
|
+
error.code = code;
|
|
52
|
+
throw error;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
beforeEach(() => {
|
|
56
|
+
originalKill = process.kill;
|
|
57
|
+
originalConsoleError = console.error;
|
|
58
|
+
loggedErrors = [];
|
|
59
|
+
console.error = (...args) => { loggedErrors.push(args); };
|
|
60
|
+
// One child plus the parent; report the parent as its own group leader so the `kill(-ppid)` branch runs too.
|
|
61
|
+
coreProcessManager['unixGetChildrenRecursive'] = () => new Set([424242]);
|
|
62
|
+
coreProcessManager['unixGetPGID'] = (pid) => pid;
|
|
63
|
+
});
|
|
64
|
+
afterEach(() => {
|
|
65
|
+
process.kill = originalKill;
|
|
66
|
+
console.error = originalConsoleError;
|
|
67
|
+
});
|
|
68
|
+
it('does not throw or log when processes in the tree are already gone (ESRCH)', () => {
|
|
69
|
+
process.kill = throwingKill('ESRCH');
|
|
70
|
+
(0, chai_1.expect)(() => coreProcessManager['unixTerminateProcessTree'](424243)).to.not.throw();
|
|
71
|
+
(0, chai_1.expect)(loggedErrors).to.be.empty;
|
|
72
|
+
});
|
|
73
|
+
it('logs unexpected kill errors (e.g. EPERM) without throwing', () => {
|
|
74
|
+
process.kill = throwingKill('EPERM');
|
|
75
|
+
(0, chai_1.expect)(() => coreProcessManager['unixTerminateProcessTree'](424243)).to.not.throw();
|
|
76
|
+
(0, chai_1.expect)(loggedErrors).to.not.be.empty;
|
|
77
|
+
});
|
|
78
|
+
it('does not throw when a kill rejects with a value that has no code (e.g. undefined)', () => {
|
|
79
|
+
const thrown = undefined;
|
|
80
|
+
process.kill = (() => { throw thrown; });
|
|
81
|
+
(0, chai_1.expect)(() => coreProcessManager['unixTerminateProcessTree'](424243)).to.not.throw();
|
|
82
|
+
(0, chai_1.expect)(loggedErrors).to.not.be.empty;
|
|
83
|
+
});
|
|
84
|
+
});
|
|
44
85
|
});
|
|
45
86
|
//# sourceMappingURL=process-utils.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-utils.spec.js","sourceRoot":"","sources":["../../src/node/process-utils.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,+BAA8B;AAC9B,yCAAsC;AACtC,mDAA+C;AAE/C,gBAAgB;AAChB,MAAM,YAAY,GAAG;;;;;;;;CAQpB,CAAC;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAE1B,IAAI,kBAAgC,CAAC;IAErC,UAAU,CAAC,GAAG,EAAE;QACZ,MAAM,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;QAClC,SAAS,CAAC,IAAI,CAAC,4BAAY,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACzD,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,4BAAY,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,8DAA8D;QAC9D,kBAAkB,CAAC,WAAW,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAQ,CAAC;QAC1E,MAAM,IAAI,GAAG,kBAAkB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAA,aAAM,EAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"process-utils.spec.js","sourceRoot":"","sources":["../../src/node/process-utils.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/core",
|
|
3
|
-
"version": "1.72.
|
|
3
|
+
"version": "1.72.1",
|
|
4
4
|
"description": "Theia is a cloud & desktop IDE framework implemented in TypeScript.",
|
|
5
5
|
"main": "lib/common/index.js",
|
|
6
6
|
"typings": "lib/common/index.d.ts",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"@lumino/virtualdom": "^2.0.4",
|
|
18
18
|
"@lumino/widgets": "2.7.5",
|
|
19
19
|
"@parcel/watcher": "^2.5.6",
|
|
20
|
-
"@theia/application-package": "1.72.
|
|
21
|
-
"@theia/request": "1.72.
|
|
20
|
+
"@theia/application-package": "1.72.1",
|
|
21
|
+
"@theia/request": "1.72.1",
|
|
22
22
|
"@types/body-parser": "^1.19.6",
|
|
23
23
|
"@types/express": "^4.17.25",
|
|
24
24
|
"@types/fs-extra": "^4.0.15",
|
|
@@ -213,13 +213,13 @@
|
|
|
213
213
|
"watch": "theiaext watch"
|
|
214
214
|
},
|
|
215
215
|
"devDependencies": {
|
|
216
|
-
"@theia/ext-scripts": "1.
|
|
217
|
-
"@theia/re-exports": "1.
|
|
216
|
+
"@theia/ext-scripts": "1.72.1",
|
|
217
|
+
"@theia/re-exports": "1.72.1",
|
|
218
218
|
"minimist": "^1.2.8",
|
|
219
219
|
"nodejs-file-downloader": "4.13.0"
|
|
220
220
|
},
|
|
221
221
|
"nyc": {
|
|
222
222
|
"extends": "../../configs/nyc.json"
|
|
223
223
|
},
|
|
224
|
-
"gitHead": "
|
|
224
|
+
"gitHead": "037c4b3e52055fc9962c9761564f431fc4864eb4"
|
|
225
225
|
}
|