diff options
Diffstat (limited to 'os.ts')
| -rw-r--r-- | os.ts | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -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; + } +} |
