Repository navigation
Expand file tree
/
Copy pathmain.js
More file actions
170 lines (170 loc) · 7.43 KB
/
Copy pathmain.js
File metadata and controls
170 lines (170 loc) · 7.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.runCodeServer = exports.openInExistingInstance = exports.runVsCodeCli = void 0;
const logger_1 = require("@coder/logger");
const cp = __importStar(require("child_process"));
const http_1 = __importDefault(require("http"));
const path = __importStar(require("path"));
const util_1 = require("../common/util");
const app_1 = require("./app");
const cli_1 = require("./cli");
const coder_cloud_1 = require("./coder_cloud");
const constants_1 = require("./constants");
const routes_1 = require("./routes");
const util_2 = require("./util");
const runVsCodeCli = (args) => {
logger_1.logger.debug("forking vs code cli...");
const vscode = cp.fork(path.resolve(__dirname, "../../lib/vscode/out/vs/server/fork"), [], {
env: {
...process.env,
CODE_SERVER_PARENT_PID: process.pid.toString(),
},
});
vscode.once("message", (message) => {
logger_1.logger.debug("got message from VS Code", logger_1.field("message", message));
if (message.type !== "ready") {
logger_1.logger.error("Unexpected response waiting for ready response", logger_1.field("type", message.type));
process.exit(1);
}
const send = { type: "cli", args };
vscode.send(send);
});
vscode.once("error", (error) => {
logger_1.logger.error("Got error from VS Code", logger_1.field("error", error));
process.exit(1);
});
vscode.on("exit", (code) => process.exit(code || 0));
};
exports.runVsCodeCli = runVsCodeCli;
const openInExistingInstance = async (args, socketPath) => {
const pipeArgs = {
type: "open",
folderURIs: [],
fileURIs: [],
forceReuseWindow: args["reuse-window"],
forceNewWindow: args["new-window"],
};
for (let i = 0; i < args._.length; i++) {
const fp = path.resolve(args._[i]);
if (await util_2.isFile(fp)) {
pipeArgs.fileURIs.push(fp);
}
else {
pipeArgs.folderURIs.push(fp);
}
}
if (pipeArgs.forceNewWindow && pipeArgs.fileURIs.length > 0) {
logger_1.logger.error("--new-window can only be used with folder paths");
process.exit(1);
}
if (pipeArgs.folderURIs.length === 0 && pipeArgs.fileURIs.length === 0) {
logger_1.logger.error("Please specify at least one file or folder");
process.exit(1);
}
const vscode = http_1.default.request({
path: "/",
method: "POST",
socketPath,
}, (response) => {
response.on("data", (message) => {
logger_1.logger.debug("got message from VS Code", logger_1.field("message", message.toString()));
});
});
vscode.on("error", (error) => {
logger_1.logger.error("got error from VS Code", logger_1.field("error", error));
});
vscode.write(JSON.stringify(pipeArgs));
vscode.end();
};
exports.openInExistingInstance = openInExistingInstance;
const runCodeServer = async (args) => {
logger_1.logger.info(`code-server ${constants_1.version} ${constants_1.commit}`);
logger_1.logger.info(`Using user-data-dir ${util_2.humanPath(args["user-data-dir"])}`);
logger_1.logger.trace(`Using extensions-dir ${util_2.humanPath(args["extensions-dir"])}`);
if (args.auth === cli_1.AuthType.Password && !args.password && !args["hashed-password"]) {
throw new Error("Please pass in a password via the config file or environment variable ($PASSWORD or $HASHED_PASSWORD)");
}
const [app, wsApp, server] = await app_1.createApp(args);
const serverAddress = app_1.ensureAddress(server);
await routes_1.register(app, wsApp, server, args);
logger_1.logger.info(`Using config file ${util_2.humanPath(args.config)}`);
logger_1.logger.info(`HTTP server listening on ${serverAddress} ${args.link ? "(randomized by --link)" : ""}`);
if (args.auth === cli_1.AuthType.Password) {
logger_1.logger.info(" - Authentication is enabled");
if (args.usingEnvPassword) {
logger_1.logger.info(" - Using password from $PASSWORD");
}
else if (args.usingEnvHashedPassword) {
logger_1.logger.info(" - Using password from $HASHED_PASSWORD");
}
else {
logger_1.logger.info(` - Using password from ${util_2.humanPath(args.config)}`);
}
}
else {
logger_1.logger.info(` - Authentication is disabled ${args.link ? "(disabled by --link)" : ""}`);
}
if (args.cert) {
logger_1.logger.info(` - Using certificate for HTTPS: ${util_2.humanPath(args.cert.value)}`);
}
else {
logger_1.logger.info(` - Not serving HTTPS ${args.link ? "(disabled by --link)" : ""}`);
}
if (args["proxy-domain"].length > 0) {
logger_1.logger.info(` - ${util_1.plural(args["proxy-domain"].length, "Proxying the following domain")}:`);
args["proxy-domain"].forEach((domain) => logger_1.logger.info(` - *.${domain}`));
}
if (args.link) {
await coder_cloud_1.coderCloudBind(serverAddress.replace(/^https?:\/\//, ""), args.link.value);
logger_1.logger.info(" - Connected to cloud agent");
}
if (args.enable && args.enable.length > 0) {
logger_1.logger.info("Enabling the following experimental features:");
args.enable.forEach((feature) => {
if (Object.values(cli_1.Feature).includes(feature)) {
logger_1.logger.info(` - "${feature}"`);
}
else {
logger_1.logger.error(` X "${feature}" (unknown feature)`);
}
});
// TODO: Could be nice to add wrapping to the logger?
logger_1.logger.info(" The code-server project does not provide stability guarantees or commit to fixing bugs relating to these experimental features. When filing bug reports, please ensure that you can reproduce the bug with all experimental features turned off.");
}
if (!args.socket && args.open) {
// The web socket doesn't seem to work if browsing with 0.0.0.0.
const openAddress = serverAddress.replace("://0.0.0.0", "://localhost");
try {
await util_2.open(openAddress);
logger_1.logger.info(`Opened ${openAddress}`);
}
catch (error) {
logger_1.logger.error("Failed to open", logger_1.field("address", openAddress), logger_1.field("error", error));
}
}
return server;
};
exports.runCodeServer = runCodeServer;
//# sourceMappingURL=main.js.map