Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/scripts/code-server.js
3520 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
// @ts-check
7
8
const cp = require('child_process');
9
const path = require('path');
10
const open = require('open');
11
const minimist = require('minimist');
12
13
async function main() {
14
15
const args = minimist(process.argv.slice(2), {
16
boolean: [
17
'help',
18
'launch'
19
]
20
});
21
22
if (args.help) {
23
console.log(
24
'./scripts/code-server.sh|bat [options]\n' +
25
' --launch Opens a browser'
26
);
27
startServer(['--help']);
28
return;
29
}
30
31
process.env['VSCODE_SERVER_PORT'] = '9888';
32
33
const serverArgs = process.argv.slice(2).filter(v => v !== '--launch');
34
const addr = await startServer(serverArgs);
35
if (args['launch']) {
36
open.default(addr);
37
}
38
}
39
40
function startServer(programArgs) {
41
return new Promise((s, e) => {
42
const env = { ...process.env };
43
const entryPoint = path.join(__dirname, '..', 'out', 'server-main.js');
44
45
console.log(`Starting server: ${entryPoint} ${programArgs.join(' ')}`);
46
const proc = cp.spawn(process.execPath, [entryPoint, ...programArgs], { env, stdio: [process.stdin, null, process.stderr] });
47
proc.stdout.on('data', e => {
48
const data = e.toString();
49
process.stdout.write(data);
50
const m = data.match(/Web UI available at (.*)/);
51
if (m) {
52
s(m[1]);
53
}
54
});
55
56
proc.on('exit', (code) => process.exit(code));
57
58
process.on('exit', () => proc.kill());
59
process.on('SIGINT', () => {
60
proc.kill();
61
process.exit(128 + 2); // https://nodejs.org/docs/v14.16.0/api/process.html#process_signal_events
62
});
63
process.on('SIGTERM', () => {
64
proc.kill();
65
process.exit(128 + 15); // https://nodejs.org/docs/v14.16.0/api/process.html#process_signal_events
66
});
67
});
68
69
}
70
71
main();
72
73