summaryrefslogtreecommitdiff
path: root/os.ts
diff options
context:
space:
mode:
Diffstat (limited to 'os.ts')
-rw-r--r--os.ts41
1 files changed, 41 insertions, 0 deletions
diff --git a/os.ts b/os.ts
new file mode 100644
index 000000000..ca97e98e9
--- /dev/null
+++ b/os.ts
@@ -0,0 +1,41 @@
+import { main as pb } from "./msg.pb";
+import { TextDecoder } from "text-encoding";
+
+// TODO move this to types.ts
+type TypedArray = Uint8Array | Float32Array | Int32Array;
+
+export function exit(code = 0): void {
+ sendMsgFromObject({
+ kind: pb.Msg.MsgKind.EXIT,
+ code
+ });
+}
+
+export function readFileSync(filename: string): string {
+ const res = sendMsgFromObject({
+ kind: pb.Msg.MsgKind.READ_FILE_SYNC,
+ path: filename
+ });
+ if (res.error != null && res.error.length > 0) {
+ throw Error(res.error);
+ }
+ const decoder = new TextDecoder("utf8");
+ return decoder.decode(res.data);
+}
+
+function typedArrayToArrayBuffer(ta: TypedArray): ArrayBuffer {
+ const ab = ta.buffer.slice(ta.byteOffset, ta.byteOffset + ta.byteLength);
+ return ab as ArrayBuffer;
+}
+
+function sendMsgFromObject(obj: pb.IMsg): null | pb.Msg {
+ const msg = pb.Msg.fromObject(obj);
+ const ui8 = pb.Msg.encode(msg).finish();
+ const ab = typedArrayToArrayBuffer(ui8);
+ const resBuf = V8Worker2.send(ab);
+ if (resBuf != null && resBuf.byteLength > 0) {
+ return pb.Msg.decode(new Uint8Array(resBuf));
+ } else {
+ return null;
+ }
+}