summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rw-r--r--js/fbs_util.ts26
-rw-r--r--js/fetch.ts12
-rw-r--r--js/main.ts34
-rw-r--r--js/os.ts104
-rw-r--r--js/timers.ts19
-rw-r--r--js/util.ts8
6 files changed, 66 insertions, 137 deletions
diff --git a/js/fbs_util.ts b/js/fbs_util.ts
new file mode 100644
index 000000000..fd953ac88
--- /dev/null
+++ b/js/fbs_util.ts
@@ -0,0 +1,26 @@
+// Copyright 2018 the Deno authors. All rights reserved. MIT license.
+import { libdeno } from "./libdeno";
+import { flatbuffers } from "flatbuffers";
+import { maybeThrowError } from "./errors";
+import { deno as fbs } from "gen/msg_generated";
+
+export function send(
+ builder: flatbuffers.Builder,
+ msgType: fbs.Any,
+ msg: flatbuffers.Offset
+): null | fbs.Base {
+ fbs.Base.startBase(builder);
+ fbs.Base.addMsg(builder, msg);
+ fbs.Base.addMsgType(builder, msgType);
+ builder.finish(fbs.Base.endBase(builder));
+
+ const resBuf = libdeno.send(builder.asUint8Array());
+ if (resBuf == null) {
+ return null;
+ } else {
+ const bb = new flatbuffers.ByteBuffer(new Uint8Array(resBuf!));
+ const baseRes = fbs.Base.getRootAsBase(bb);
+ maybeThrowError(baseRes);
+ return baseRes;
+ }
+}
diff --git a/js/fetch.ts b/js/fetch.ts
index 1c733e066..73ad34e7a 100644
--- a/js/fetch.ts
+++ b/js/fetch.ts
@@ -8,7 +8,7 @@ import {
notImplemented
} from "./util";
import { flatbuffers } from "flatbuffers";
-import { libdeno } from "./libdeno";
+import { send } from "./fbs_util";
import { deno as fbs } from "gen/msg_generated";
import {
Headers,
@@ -166,14 +166,8 @@ class FetchRequest {
fbs.FetchReq.addId(builder, this.id);
fbs.FetchReq.addUrl(builder, url);
const msg = fbs.FetchReq.endFetchReq(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addMsg(builder, msg);
- fbs.Base.addMsgType(builder, fbs.Any.FetchReq);
- builder.finish(fbs.Base.endBase(builder));
- const resBuf = libdeno.send(builder.asUint8Array());
- assert(resBuf == null);
-
- //console.log("FetchReq sent", builder);
+ const res = send(builder, fbs.Any.FetchReq, msg);
+ assert(res == null);
}
}
diff --git a/js/main.ts b/js/main.ts
index 133c47785..94ded73e1 100644
--- a/js/main.ts
+++ b/js/main.ts
@@ -1,24 +1,25 @@
// Copyright 2018 the Deno authors. All rights reserved. MIT license.
import { flatbuffers } from "flatbuffers";
import { deno as fbs } from "gen/msg_generated";
-import { assert, assignCmdId, log, setLogDebug } from "./util";
+import { assert, log, setLogDebug } from "./util";
import * as os from "./os";
import { DenoCompiler } from "./compiler";
import { libdeno } from "./libdeno";
import * as timers from "./timers";
import { onFetchRes } from "./fetch";
import { argv } from "./deno";
+import { send } from "./fbs_util";
-function startMsg(cmdId: number): Uint8Array {
+function sendStart(): fbs.StartRes {
const builder = new flatbuffers.Builder();
fbs.Start.startStart(builder);
const startOffset = fbs.Start.endStart(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addCmdId(builder, cmdId);
- fbs.Base.addMsg(builder, startOffset);
- fbs.Base.addMsgType(builder, fbs.Any.Start);
- builder.finish(fbs.Base.endBase(builder));
- return builder.asUint8Array();
+ const baseRes = send(builder, fbs.Any.Start, startOffset);
+ assert(baseRes != null);
+ assert(fbs.Any.StartRes === baseRes!.msgType());
+ const startRes = new fbs.StartRes();
+ assert(baseRes!.msg(startRes) != null);
+ return startRes;
}
function onMessage(ui8: Uint8Array) {
@@ -64,22 +65,7 @@ export default function denoMain() {
// First we send an empty "Start" message to let the privlaged side know we
// are ready. The response should be a "StartRes" message containing the CLI
// argv and other info.
- const cmdId = assignCmdId();
- const res = libdeno.send(startMsg(cmdId));
-
- // TODO(ry) Remove this conditional once main.rs gets up to speed.
- if (res == null) {
- console.log(`The 'Start' message got a null response. Normally this would
- be an error but main.rs currently does this."); Exiting without error.`);
- return;
- }
-
- // Deserialize res into startResMsg.
- const bb = new flatbuffers.ByteBuffer(res);
- const base = fbs.Base.getRootAsBase(bb);
- assert(fbs.Any.StartRes === base.msgType());
- const startResMsg = new fbs.StartRes();
- assert(base.msg(startResMsg) != null);
+ const startResMsg = sendStart();
setLogDebug(startResMsg.debugFlag());
diff --git a/js/os.ts b/js/os.ts
index 46385c493..8730a6ddf 100644
--- a/js/os.ts
+++ b/js/os.ts
@@ -3,20 +3,15 @@ import { ModuleInfo } from "./types";
import { deno as fbs } from "gen/msg_generated";
import { assert } from "./util";
import * as util from "./util";
-import { maybeThrowError } from "./errors";
import { flatbuffers } from "flatbuffers";
-import { libdeno } from "./libdeno";
+import { send } from "./fbs_util";
export function exit(exitCode = 0): never {
const builder = new flatbuffers.Builder();
fbs.Exit.startExit(builder);
fbs.Exit.addCode(builder, exitCode);
const msg = fbs.Exit.endExit(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addMsg(builder, msg);
- fbs.Base.addMsgType(builder, fbs.Any.Exit);
- builder.finish(fbs.Base.endBase(builder));
- libdeno.send(builder.asUint8Array());
+ send(builder, fbs.Any.Exit, msg);
return util.unreachable();
}
@@ -33,21 +28,11 @@ export function codeFetch(
fbs.CodeFetch.addModuleSpecifier(builder, moduleSpecifier_);
fbs.CodeFetch.addContainingFile(builder, containingFile_);
const msg = fbs.CodeFetch.endCodeFetch(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addMsg(builder, msg);
- fbs.Base.addMsgType(builder, fbs.Any.CodeFetch);
- builder.finish(fbs.Base.endBase(builder));
- const resBuf = libdeno.send(builder.asUint8Array());
- assert(resBuf != null);
- // Process CodeFetchRes
- // TypeScript does not track `assert` from a CFA perspective, therefore not
- // null assertion `!`
- const bb = new flatbuffers.ByteBuffer(new Uint8Array(resBuf!));
- const baseRes = fbs.Base.getRootAsBase(bb);
- maybeThrowError(baseRes);
- assert(fbs.Any.CodeFetchRes === baseRes.msgType());
+ const baseRes = send(builder, fbs.Any.CodeFetch, msg);
+ assert(baseRes != null);
+ assert(fbs.Any.CodeFetchRes === baseRes!.msgType());
const codeFetchRes = new fbs.CodeFetchRes();
- assert(baseRes.msg(codeFetchRes) != null);
+ assert(baseRes!.msg(codeFetchRes) != null);
const r = {
moduleName: codeFetchRes.moduleName(),
filename: codeFetchRes.filename(),
@@ -72,17 +57,8 @@ export function codeCache(
fbs.CodeCache.addSourceCode(builder, sourceCode_);
fbs.CodeCache.addOutputCode(builder, outputCode_);
const msg = fbs.CodeCache.endCodeCache(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addMsg(builder, msg);
- fbs.Base.addMsgType(builder, fbs.Any.CodeCache);
- builder.finish(fbs.Base.endBase(builder));
- const resBuf = libdeno.send(builder.asUint8Array());
- // Expect null or error.
- if (resBuf != null) {
- const bb = new flatbuffers.ByteBuffer(new Uint8Array(resBuf));
- const baseRes = fbs.Base.getRootAsBase(bb);
- maybeThrowError(baseRes);
- }
+ const baseRes = send(builder, fbs.Any.CodeCache, msg);
+ assert(baseRes == null); // Expect null or error.
}
/**
@@ -119,18 +95,11 @@ export function makeTempDirSync({
fbs.MakeTempDir.addSuffix(builder, fbSuffix);
}
const msg = fbs.MakeTempDir.endMakeTempDir(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addMsg(builder, msg);
- fbs.Base.addMsgType(builder, fbs.Any.MakeTempDir);
- builder.finish(fbs.Base.endBase(builder));
- const resBuf = libdeno.send(builder.asUint8Array());
- assert(resBuf != null);
- const bb = new flatbuffers.ByteBuffer(new Uint8Array(resBuf!));
- const baseRes = fbs.Base.getRootAsBase(bb);
- maybeThrowError(baseRes);
- assert(fbs.Any.MakeTempDirRes === baseRes.msgType());
+ const baseRes = send(builder, fbs.Any.MakeTempDir, msg);
+ assert(baseRes != null);
+ assert(fbs.Any.MakeTempDirRes === baseRes!.msgType());
const res = new fbs.MakeTempDirRes();
- assert(baseRes.msg(res) != null);
+ assert(baseRes!.msg(res) != null);
const path = res.path();
assert(path != null);
return path!;
@@ -149,23 +118,13 @@ export function readFileSync(filename: string): Uint8Array {
fbs.ReadFileSync.startReadFileSync(builder);
fbs.ReadFileSync.addFilename(builder, filename_);
const msg = fbs.ReadFileSync.endReadFileSync(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addMsg(builder, msg);
- fbs.Base.addMsgType(builder, fbs.Any.ReadFileSync);
- builder.finish(fbs.Base.endBase(builder));
- const resBuf = libdeno.send(builder.asUint8Array());
- assert(resBuf != null);
- // TypeScript does not track `assert` from a CFA perspective, therefore not
- // null assertion `!`
- const bb = new flatbuffers.ByteBuffer(new Uint8Array(resBuf!));
- const baseRes = fbs.Base.getRootAsBase(bb);
- maybeThrowError(baseRes);
- assert(fbs.Any.ReadFileSyncRes === baseRes.msgType());
+ const baseRes = send(builder, fbs.Any.ReadFileSync, msg);
+ assert(baseRes != null);
+ assert(fbs.Any.ReadFileSyncRes === baseRes!.msgType());
const res = new fbs.ReadFileSyncRes();
- assert(baseRes.msg(res) != null);
+ assert(baseRes!.msg(res) != null);
const dataArray = res.dataArray();
assert(dataArray != null);
- // TypeScript cannot track assertion above, therefore not null assertion
return new Uint8Array(dataArray!);
}
@@ -226,22 +185,12 @@ function statSyncInner(filename: string, lstat: boolean): FileInfo {
fbs.StatSync.addFilename(builder, filename_);
fbs.StatSync.addLstat(builder, lstat);
const msg = fbs.StatSync.endStatSync(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addMsg(builder, msg);
- fbs.Base.addMsgType(builder, fbs.Any.StatSync);
- builder.finish(fbs.Base.endBase(builder));
- const resBuf = libdeno.send(builder.asUint8Array());
- assert(resBuf != null);
- // TypeScript does not track `assert` from a CFA perspective, therefore not
- // null assertion `!`
- const bb = new flatbuffers.ByteBuffer(new Uint8Array(resBuf!));
- const baseRes = fbs.Base.getRootAsBase(bb);
- maybeThrowError(baseRes);
- assert(fbs.Any.StatSyncRes === baseRes.msgType());
+ const baseRes = send(builder, fbs.Any.StatSync, msg);
+ assert(baseRes != null);
+ assert(fbs.Any.StatSyncRes === baseRes!.msgType());
const res = new fbs.StatSyncRes();
- assert(baseRes.msg(res) != null);
- // TypeScript cannot track assertion above, therefore not null assertion
- return new FileInfo(baseRes.msg(res)!);
+ assert(baseRes!.msg(res) != null);
+ return new FileInfo(res);
}
export function writeFileSync(
@@ -265,14 +214,5 @@ export function writeFileSync(
fbs.WriteFileSync.addData(builder, dataOffset);
fbs.WriteFileSync.addPerm(builder, perm);
const msg = fbs.WriteFileSync.endWriteFileSync(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addMsg(builder, msg);
- fbs.Base.addMsgType(builder, fbs.Any.WriteFileSync);
- builder.finish(fbs.Base.endBase(builder));
- const resBuf = libdeno.send(builder.asUint8Array());
- if (resBuf != null) {
- const bb = new flatbuffers.ByteBuffer(new Uint8Array(resBuf!));
- const baseRes = fbs.Base.getRootAsBase(bb);
- maybeThrowError(baseRes);
- }
+ send(builder, fbs.Any.WriteFileSync, msg);
}
diff --git a/js/timers.ts b/js/timers.ts
index 43bd199b1..d09af0295 100644
--- a/js/timers.ts
+++ b/js/timers.ts
@@ -3,7 +3,7 @@ import { assert } from "./util";
import * as util from "./util";
import { deno as fbs } from "gen/msg_generated";
import { flatbuffers } from "flatbuffers";
-import { libdeno } from "./libdeno";
+import { send } from "./fbs_util";
let nextTimerId = 1;
@@ -60,13 +60,8 @@ function startTimer(
fbs.TimerStart.addInterval(builder, timer.interval);
fbs.TimerStart.addDelay(builder, timer.delay);
const msg = fbs.TimerStart.endTimerStart(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addMsg(builder, msg);
- fbs.Base.addMsgType(builder, fbs.Any.TimerStart);
- builder.finish(fbs.Base.endBase(builder));
- const resBuf = libdeno.send(builder.asUint8Array());
- assert(resBuf == null);
-
+ const baseRes = send(builder, fbs.Any.TimerStart, msg);
+ assert(baseRes == null);
return timer.id;
}
@@ -95,10 +90,6 @@ export function clearTimer(id: number) {
fbs.TimerClear.startTimerClear(builder);
fbs.TimerClear.addId(builder, id);
const msg = fbs.TimerClear.endTimerClear(builder);
- fbs.Base.startBase(builder);
- fbs.Base.addMsg(builder, msg);
- fbs.Base.addMsgType(builder, fbs.Any.TimerClear);
- builder.finish(fbs.Base.endBase(builder));
- const resBuf = libdeno.send(builder.asUint8Array());
- assert(resBuf == null);
+ const res = send(builder, fbs.Any.TimerClear, msg);
+ assert(res == null);
}
diff --git a/js/util.ts b/js/util.ts
index 1754dc663..959bc6abd 100644
--- a/js/util.ts
+++ b/js/util.ts
@@ -21,14 +21,6 @@ export function assert(cond: boolean, msg = "assert") {
}
}
-let cmdIdCounter = 0;
-export function assignCmdId(): number {
- // TODO(piscisaureus) Safely re-use so they don't overflow.
- const cmdId = ++cmdIdCounter;
- assert(cmdId < 2 ** 32, "cmdId overflow");
- return cmdId;
-}
-
export function typedArrayToArrayBuffer(ta: TypedArray): ArrayBuffer {
const ab = ta.buffer.slice(ta.byteOffset, ta.byteOffset + ta.byteLength);
return ab as ArrayBuffer;