Propagate full env to browser (#756)

* Propogate full env to browser

* Add support for setting $ITEM_URL

* Add serviceURL getter
This commit is contained in:
Anmol Sethi 2019-06-11 12:54:49 -04:00 committed by Asher
parent 362715bbeb
commit 02f62882b8
13 changed files with 95 additions and 37 deletions

View File

@ -35,6 +35,10 @@ class OS {
default: this._platform = "linux"; break;
}
process.platform = this._platform;
process.env = {};
data.env.forEach((v, k) => {
process.env[k] = v;
});
}
public release(): string {

View File

@ -14,5 +14,8 @@
"rimraf": "^2.6.3",
"text-encoding": "^0.7.0",
"ts-protoc-gen": "^0.8.0"
},
"scripts": {
"gen": "./scripts/generate_proto.sh"
}
}

View File

@ -1,3 +1,5 @@
#!/bin/bash
protoc --plugin="protoc-gen-ts=./node_modules/.bin/protoc-gen-ts" --js_out="import_style=commonjs,binary:./src/proto" --ts_out="./src/proto" ./src/proto/*.proto --proto_path="./src/proto"
cd "$(dirname "$0")/.."
protoc --plugin="protoc-gen-ts=./node_modules/.bin/protoc-gen-ts" --js_out="import_style=commonjs,binary:./src/proto" --ts_out="./src/proto" ./src/proto/*.proto --proto_path="./src/proto"

View File

@ -280,6 +280,7 @@ export class Client {
builtInExtensionsDirectory: init.getBuiltinExtensionsDir(),
extraExtensionDirectories: init.getExtraExtensionDirectoriesList(),
extraBuiltinExtensionDirectories: init.getExtraBuiltinExtensionDirectoriesList(),
env: init.getEnvMap(),
};
this.initDataEmitter.emit(this._initData);
break;

View File

@ -1,3 +1,5 @@
import * as jspb from "google-protobuf";
export interface SendableConnection {
send(data: Buffer | Uint8Array): void;
}
@ -27,6 +29,7 @@ export interface InitData {
readonly builtInExtensionsDirectory: string;
readonly extraExtensionDirectories: string[];
readonly extraBuiltinExtensionDirectories: string[];
readonly env: jspb.Map<string, string>;
}
export interface SharedProcessData {

View File

@ -103,6 +103,11 @@ export class Server {
initMsg.setShell(os.userInfo().shell || global.process.env.SHELL || "");
initMsg.setExtraExtensionDirectoriesList(this.options.extraExtensionDirectories || []);
initMsg.setExtraBuiltinExtensionDirectoriesList(this.options.extraBuiltinExtensionDirectories || []);
for (let key in process.env) {
initMsg.getEnvMap().set(key, process.env[key] as string);
}
const srvMsg = new ServerMessage();
srvMsg.setInit(initMsg);
connection.send(srvMsg.serializeBinary());

View File

@ -44,4 +44,6 @@ message WorkingInit {
string extensions_directory = 8;
repeated string extra_extension_directories = 9;
repeated string extra_builtin_extension_directories = 10;
map<string, string> env = 11;
}

View File

@ -145,6 +145,8 @@ export class WorkingInit extends jspb.Message {
setExtraBuiltinExtensionDirectoriesList(value: Array<string>): void;
addExtraBuiltinExtensionDirectories(value: string, index?: number): string;
getEnvMap(): jspb.Map<string, string>;
clearEnvMap(): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): WorkingInit.AsObject;
static toObject(includeInstance: boolean, msg: WorkingInit): WorkingInit.AsObject;
@ -167,6 +169,7 @@ export namespace WorkingInit {
extensionsDirectory: string,
extraExtensionDirectoriesList: Array<string>,
extraBuiltinExtensionDirectoriesList: Array<string>,
envMap: Array<[string, string]>,
}
export enum OperatingSystem {

View File

@ -137,7 +137,7 @@ proto.ClientMessage.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.ClientMessage.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
method: (f = msg.getMethod()) && node_pb.Method.toObject(includeInstance, f),
ping: (f = msg.getPing()) && node_pb.Ping.toObject(includeInstance, f)
};
@ -360,7 +360,7 @@ proto.ServerMessage.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.ServerMessage.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
fail: (f = msg.getFail()) && node_pb.Method.Fail.toObject(includeInstance, f),
success: (f = msg.getSuccess()) && node_pb.Method.Success.toObject(includeInstance, f),
event: (f = msg.getEvent()) && node_pb.Event.toObject(includeInstance, f),
@ -794,7 +794,7 @@ proto.WorkingInit.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.WorkingInit.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
homeDirectory: jspb.Message.getFieldWithDefault(msg, 1, ""),
tmpDirectory: jspb.Message.getFieldWithDefault(msg, 2, ""),
dataDirectory: jspb.Message.getFieldWithDefault(msg, 3, ""),
@ -804,7 +804,8 @@ proto.WorkingInit.toObject = function(includeInstance, msg) {
builtinExtensionsDir: jspb.Message.getFieldWithDefault(msg, 7, ""),
extensionsDirectory: jspb.Message.getFieldWithDefault(msg, 8, ""),
extraExtensionDirectoriesList: jspb.Message.getRepeatedField(msg, 9),
extraBuiltinExtensionDirectoriesList: jspb.Message.getRepeatedField(msg, 10)
extraBuiltinExtensionDirectoriesList: jspb.Message.getRepeatedField(msg, 10),
envMap: (f = msg.getEnvMap()) ? f.toObject(includeInstance, undefined) : []
};
if (includeInstance) {
@ -881,6 +882,12 @@ proto.WorkingInit.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString());
msg.addExtraBuiltinExtensionDirectories(value);
break;
case 11:
var value = msg.getEnvMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "");
});
break;
default:
reader.skipField();
break;
@ -980,6 +987,10 @@ proto.WorkingInit.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getEnvMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(11, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
};
@ -1176,4 +1187,25 @@ proto.WorkingInit.prototype.clearExtraBuiltinExtensionDirectoriesList = function
};
/**
* map<string, string> env = 11;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,string>}
*/
proto.WorkingInit.prototype.getEnvMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,string>} */ (
jspb.Message.getMapField(this, 11, opt_noLazyCreate,
null));
};
/**
* Clears values from the map. The map will be non-null.
*/
proto.WorkingInit.prototype.clearEnvMap = function() {
this.getEnvMap().clear();
};
goog.object.extend(exports, proto);

View File

@ -583,7 +583,7 @@ proto.Argument.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Argument.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
error: (f = msg.getError()) && proto.Argument.ErrorValue.toObject(includeInstance, f),
buffer: (f = msg.getBuffer()) && proto.Argument.BufferValue.toObject(includeInstance, f),
object: (f = msg.getObject()) && proto.Argument.ObjectValue.toObject(includeInstance, f),
@ -843,7 +843,7 @@ proto.Argument.ErrorValue.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Argument.ErrorValue.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
message: jspb.Message.getFieldWithDefault(msg, 1, ""),
stack: jspb.Message.getFieldWithDefault(msg, 2, ""),
code: jspb.Message.getFieldWithDefault(msg, 3, "")
@ -1022,7 +1022,7 @@ proto.Argument.BufferValue.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Argument.BufferValue.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
data: msg.getData_asB64()
};
@ -1171,7 +1171,7 @@ proto.Argument.ObjectValue.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Argument.ObjectValue.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
dataMap: (f = msg.getDataMap()) ? f.toObject(includeInstance, proto.Argument.toObject) : []
};
@ -1308,7 +1308,7 @@ proto.Argument.ArrayValue.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Argument.ArrayValue.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
dataList: jspb.Message.toObjectList(msg.getDataList(),
proto.Argument.toObject, includeInstance)
};
@ -1455,7 +1455,7 @@ proto.Argument.ProxyValue.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Argument.ProxyValue.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
id: jspb.Message.getFieldWithDefault(msg, 1, 0)
};
@ -1580,7 +1580,7 @@ proto.Argument.FunctionValue.prototype.toObject = function(opt_includeInstance)
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Argument.FunctionValue.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
id: jspb.Message.getFieldWithDefault(msg, 1, 0)
};
@ -1705,7 +1705,7 @@ proto.Argument.NullValue.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Argument.NullValue.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
};
@ -1804,7 +1804,7 @@ proto.Argument.UndefinedValue.prototype.toObject = function(opt_includeInstance)
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Argument.UndefinedValue.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
};
@ -1903,7 +1903,7 @@ proto.Argument.DateValue.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Argument.DateValue.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
date: jspb.Message.getFieldWithDefault(msg, 1, "")
};
@ -2449,7 +2449,7 @@ proto.Method.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Method.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
namedProxy: (f = msg.getNamedProxy()) && proto.Method.Named.toObject(includeInstance, f),
numberedProxy: (f = msg.getNumberedProxy()) && proto.Method.Numbered.toObject(includeInstance, f)
};
@ -2582,7 +2582,7 @@ proto.Method.Named.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Method.Named.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
id: jspb.Message.getFieldWithDefault(msg, 1, 0),
module: jspb.Message.getFieldWithDefault(msg, 2, 0),
method: jspb.Message.getFieldWithDefault(msg, 3, ""),
@ -2817,7 +2817,7 @@ proto.Method.Numbered.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Method.Numbered.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
id: jspb.Message.getFieldWithDefault(msg, 1, 0),
proxyId: jspb.Message.getFieldWithDefault(msg, 2, 0),
method: jspb.Message.getFieldWithDefault(msg, 3, ""),
@ -3045,7 +3045,7 @@ proto.Method.Fail.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Method.Fail.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
id: jspb.Message.getFieldWithDefault(msg, 1, 0),
response: (f = msg.getResponse()) && proto.Argument.toObject(includeInstance, f)
};
@ -3217,7 +3217,7 @@ proto.Method.Success.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Method.Success.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
id: jspb.Message.getFieldWithDefault(msg, 1, 0),
response: (f = msg.getResponse()) && proto.Argument.toObject(includeInstance, f)
};
@ -3481,7 +3481,7 @@ proto.Callback.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Callback.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
namedCallback: (f = msg.getNamedCallback()) && proto.Callback.Named.toObject(includeInstance, f),
numberedCallback: (f = msg.getNumberedCallback()) && proto.Callback.Numbered.toObject(includeInstance, f)
};
@ -3614,7 +3614,7 @@ proto.Callback.Named.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Callback.Named.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
module: jspb.Message.getFieldWithDefault(msg, 1, 0),
callbackId: jspb.Message.getFieldWithDefault(msg, 2, 0),
argsList: jspb.Message.toObjectList(msg.getArgsList(),
@ -3822,7 +3822,7 @@ proto.Callback.Numbered.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Callback.Numbered.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
proxyId: jspb.Message.getFieldWithDefault(msg, 1, 0),
callbackId: jspb.Message.getFieldWithDefault(msg, 2, 0),
argsList: jspb.Message.toObjectList(msg.getArgsList(),
@ -4115,7 +4115,7 @@ proto.Event.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Event.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
namedEvent: (f = msg.getNamedEvent()) && proto.Event.Named.toObject(includeInstance, f),
numberedEvent: (f = msg.getNumberedEvent()) && proto.Event.Numbered.toObject(includeInstance, f)
};
@ -4248,7 +4248,7 @@ proto.Event.Named.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Event.Named.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
module: jspb.Message.getFieldWithDefault(msg, 1, 0),
event: jspb.Message.getFieldWithDefault(msg, 2, ""),
argsList: jspb.Message.toObjectList(msg.getArgsList(),
@ -4456,7 +4456,7 @@ proto.Event.Numbered.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Event.Numbered.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
proxyId: jspb.Message.getFieldWithDefault(msg, 1, 0),
event: jspb.Message.getFieldWithDefault(msg, 2, ""),
argsList: jspb.Message.toObjectList(msg.getArgsList(),
@ -4723,7 +4723,7 @@ proto.Ping.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Ping.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
};
@ -4822,7 +4822,7 @@ proto.Pong.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.Pong.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
};

View File

@ -62,7 +62,7 @@ proto.SharedProcessActive.prototype.toObject = function(opt_includeInstance) {
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.SharedProcessActive.toObject = function(includeInstance, msg) {
var obj = {
var f, obj = {
socketPath: jspb.Message.getFieldWithDefault(msg, 1, ""),
logPath: jspb.Message.getFieldWithDefault(msg, 2, "")
};

View File

@ -28,12 +28,17 @@ class Product implements IProductConfiguration {
return this._dataFolderName;
}
public extensionsGallery = {
serviceUrl: global && global.process && global.process.env.SERVICE_URL
|| process.env.SERVICE_URL
|| "https://v1.extapi.coder.com",
// tslint:disable-next-line:no-any
} as any;
// tslint:disable-next-line:no-any
public extensionsGallery: any = {
get serviceUrl(): string {
return process.env.SERVICE_URL || "https://v1.extapi.coder.com";
},
get itemUrl(): string {
return process.env.ITEM_URL || "";
},
};
public extensionExecutionEnvironments = {
"wayou.vscode-todo-highlight": "worker",

View File

@ -90,8 +90,6 @@ module.exports = (options = {}) => ({
}),
new webpack.DefinePlugin({
"process.env.NODE_ENV": `"${environment}"`,
"process.env.LOG_LEVEL": `"${process.env.LOG_LEVEL || ""}"`,
"process.env.SERVICE_URL": `"${process.env.SERVICE_URL || ""}"`,
"process.env.VERSION": `"${process.env.VERSION || ""}"`,
}),
],