summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.go16
-rw-r--r--main.ts6
-rw-r--r--msg.proto64
-rw-r--r--os.go14
-rw-r--r--os.ts10
5 files changed, 66 insertions, 44 deletions
diff --git a/main.go b/main.go
index ab1828d94..e3eb446f6 100644
--- a/main.go
+++ b/main.go
@@ -58,16 +58,14 @@ func main() {
cwd, err := os.Getwd()
check(err)
+ var command = Msg_START // TODO use proto3
PubMsg("start", &Msg{
- Payload: &Msg_Start{
- Start: &StartMsg{
- Cwd: &cwd,
- Argv: args,
- DebugFlag: flagDebug,
- MainJs: &main_js,
- MainMap: &main_map,
- },
- },
+ Command: &command,
+ StartCwd: &cwd,
+ StartArgv: args,
+ StartDebugFlag: flagDebug,
+ StartMainJs: &main_js,
+ StartMainMap: &main_map,
})
DispatchLoop()
diff --git a/main.ts b/main.ts
index 4767f51ec..3cdbe6c2b 100644
--- a/main.ts
+++ b/main.ts
@@ -19,7 +19,11 @@ dispatch.sub("start", (payload: Uint8Array) => {
startCalled = true;
const msg = pb.Msg.decode(payload);
- const { cwd, argv, debugFlag, mainJs, mainMap } = msg.start;
+ const cwd = msg.startCwd;
+ const argv = msg.startArgv;
+ const debugFlag = msg.startDebugFlag;
+ const mainJs = msg.startMainJs;
+ const mainMap = msg.startMainMap;
debug = debugFlag;
util.log("start", { cwd, argv, debugFlag });
diff --git a/msg.proto b/msg.proto
index 68ff52255..dcaa72af8 100644
--- a/msg.proto
+++ b/msg.proto
@@ -8,39 +8,51 @@ message BaseMsg {
message Msg {
optional string error = 1;
- oneof payload {
- StartMsg start = 10;
- SourceCodeFetchMsg source_code_fetch = 11;
- SourceCodeFetchResMsg source_code_fetch_res = 12;
- SourceCodeCacheMsg source_code_cache = 13;
- ExitMsg exit = 14;
- TimerStartMsg timer_start = 15;
- TimerReadyMsg timer_ready = 16;
- TimerClearMsg timer_clear = 17;
+
+ enum Command {
+ ERROR = 1;
+ START = 2;
+ SOURCE_CODE_FETCH_RES = 3;
+ ONEOF = 100;
}
-}
+ optional Command command = 2 [ default = ONEOF ];
-message StartMsg {
- optional string cwd = 1;
- repeated string argv = 2;
- optional bool debug_flag = 3;
- optional string main_js = 4; // The contents of dist/main.js
- optional string main_map = 5; // The contents of dist/main.map
-}
+ // We avoid creating a message for each command (and use oneof or any types)
+ // In order to reduce code in the size of the generated javascript
+ // "msg.pb.js". It seems that each new message adds 20k and we want to
+ // potentially add many hundreds of commands. Therefore we just prefix command
+ // arguments by their name.
-message SourceCodeFetchMsg {
- optional string module_specifier = 1;
- optional string containing_file = 2;
-}
+ // Start
+ optional string start_cwd = 10;
+ repeated string start_argv = 11;
+ optional bool start_debug_flag = 12;
+ optional string start_main_js = 13; // The contents of dist/main.js
+ optional string start_main_map = 14; // The contents of dist/main.map
-message SourceCodeFetchResMsg {
+ // SOURCE_CODE_FETCH_RES
// If it's a non-http module, moduleName and filename will be the same.
// For http modules, moduleName is its resolved http URL, and filename
// is the location of the locally downloaded source code.
- optional string moduleName = 1;
- optional string filename = 2;
- optional string source_code = 3;
- optional string output_code = 4; // Non-empty only if cached.
+ optional string source_code_fetch_res_module_name = 30;
+ optional string source_code_fetch_res_filename = 31;
+ optional string source_code_fetch_res_source_code = 32;
+ optional string source_code_fetch_res_output_code =
+ 33; // Non-empty only if cached.
+
+ oneof payload {
+ SourceCodeFetchMsg source_code_fetch = 100;
+ SourceCodeCacheMsg source_code_cache = 102;
+ ExitMsg exit = 103;
+ TimerStartMsg timer_start = 104;
+ TimerReadyMsg timer_ready = 105;
+ TimerClearMsg timer_clear = 106;
+ }
+}
+
+message SourceCodeFetchMsg {
+ optional string module_specifier = 1;
+ optional string containing_file = 2;
}
message SourceCodeCacheMsg {
diff --git a/os.go b/os.go
index 98997cedc..fe4789961 100644
--- a/os.go
+++ b/os.go
@@ -99,13 +99,13 @@ func HandleSourceCodeFetch(moduleSpecifier string, containingFile string) (out [
}
var sourceCode = string(sourceCodeBuf)
- res.Payload = &Msg_SourceCodeFetchRes{
- SourceCodeFetchRes: &SourceCodeFetchResMsg{
- ModuleName: &moduleName,
- Filename: &filename,
- SourceCode: &sourceCode,
- OutputCode: &outputCode,
- },
+ var command = Msg_SOURCE_CODE_FETCH_RES
+ res = &Msg{
+ Command: &command,
+ SourceCodeFetchResModuleName: &moduleName,
+ SourceCodeFetchResFilename: &filename,
+ SourceCodeFetchResSourceCode: &sourceCode,
+ SourceCodeFetchResOutputCode: &outputCode,
}
return
}
diff --git a/os.ts b/os.ts
index 409c1186f..de4bdf436 100644
--- a/os.ts
+++ b/os.ts
@@ -1,5 +1,7 @@
import { ModuleInfo } from "./types";
import { sendMsg } from "./dispatch";
+import { main as pb } from "./msg.pb";
+import { assert } from "./util";
export function exit(code = 0): void {
sendMsg("os", { exit: { code } });
@@ -12,7 +14,13 @@ export function sourceCodeFetch(
const res = sendMsg("os", {
sourceCodeFetch: { moduleSpecifier, containingFile }
});
- return res.sourceCodeFetchRes;
+ assert(res.command === pb.Msg.Command.SOURCE_CODE_FETCH_RES);
+ return {
+ moduleName: res.sourceCodeFetchResModuleName,
+ filename: res.sourceCodeFetchResFilename,
+ sourceCode: res.sourceCodeFetchResSourceCode,
+ outputCode: res.sourceCodeFetchResOutputCode
+ };
}
export function sourceCodeCache(