summaryrefslogtreecommitdiff
path: root/js/dispatch_flatbuffers.ts
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2019-08-26 10:58:44 -0400
committerRyan Dahl <ry@tinyclouds.org>2019-08-26 14:56:42 -0400
commitd8ada4d3fcc5dfe7f76103399a1d765fbab2ee45 (patch)
tree2209cb60cd537d1da5c1687ab2b7996655654c06 /js/dispatch_flatbuffers.ts
parent7ff67017f2153eeed393da670777ff85df2801ca (diff)
Port readSync/writeSync ops to minimal
This removes dispatch_flatbuffers as it is now unused. There are still a few places where msg_generated is used: ErrorKind and MediaType. These will be dealt with later.
Diffstat (limited to 'js/dispatch_flatbuffers.ts')
-rw-r--r--js/dispatch_flatbuffers.ts151
1 files changed, 0 insertions, 151 deletions
diff --git a/js/dispatch_flatbuffers.ts b/js/dispatch_flatbuffers.ts
deleted file mode 100644
index 0e375dbdf..000000000
--- a/js/dispatch_flatbuffers.ts
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
-import * as flatbuffers from "./flatbuffers";
-import { DenoError } from "./errors";
-import { core } from "./core";
-import * as msg from "gen/cli/msg_generated";
-import * as util from "./util";
-import { OP_FLATBUFFER } from "./dispatch";
-export { msg, flatbuffers };
-
-const promiseTable = new Map<number, util.Resolvable<msg.Base>>();
-let _nextPromiseId = 1;
-
-export function nextPromiseId(): number {
- return _nextPromiseId++;
-}
-
-interface FlatbufferRecord {
- promiseId: number;
- base: msg.Base;
-}
-
-export function asyncMsgFromRust(opId: number, ui8: Uint8Array): void {
- let { promiseId, base } = flatbufferRecordFromBuf(ui8);
- const promise = promiseTable.get(promiseId);
- util.assert(promise != null, `Expecting promise in table. ${promiseId}`);
- promiseTable.delete(promiseId);
- const err = maybeError(base);
- if (err != null) {
- promise!.reject(err);
- } else {
- promise!.resolve(base);
- }
-}
-
-function flatbufferRecordFromBuf(buf: Uint8Array): FlatbufferRecord {
- const bb = new flatbuffers.ByteBuffer(buf);
- const base = msg.Base.getRootAsBase(bb);
- return {
- promiseId: base.cmdId(),
- base
- };
-}
-
-function ui8FromArrayBufferView(abv: ArrayBufferView): Uint8Array {
- return new Uint8Array(abv.buffer, abv.byteOffset, abv.byteLength);
-}
-
-function sendInternal(
- builder: flatbuffers.Builder,
- innerType: msg.Any,
- inner: flatbuffers.Offset,
- zeroCopy: undefined | ArrayBufferView,
- isSync: true
-): Uint8Array;
-function sendInternal(
- builder: flatbuffers.Builder,
- innerType: msg.Any,
- inner: flatbuffers.Offset,
- zeroCopy: undefined | ArrayBufferView,
- isSync: false
-): Promise<msg.Base>;
-function sendInternal(
- builder: flatbuffers.Builder,
- innerType: msg.Any,
- inner: flatbuffers.Offset,
- zeroCopy: undefined | ArrayBufferView,
- isSync: boolean
-): Promise<msg.Base> | Uint8Array {
- const cmdId = nextPromiseId();
- msg.Base.startBase(builder);
- msg.Base.addInner(builder, inner);
- msg.Base.addInnerType(builder, innerType);
- msg.Base.addSync(builder, isSync);
- msg.Base.addCmdId(builder, cmdId);
- builder.finish(msg.Base.endBase(builder));
-
- const control = builder.asUint8Array();
-
- const response = core.dispatch(
- OP_FLATBUFFER, // TODO(ry) Use actual opId later.
- control,
- zeroCopy ? ui8FromArrayBufferView(zeroCopy) : undefined
- );
-
- builder.inUse = false;
-
- if (response == null) {
- util.assert(!isSync);
- const promise = util.createResolvable<msg.Base>();
- promiseTable.set(cmdId, promise);
- return promise;
- } else {
- if (!isSync) {
- // We can easily and correctly allow for sync responses to async calls
- // by creating and returning a promise from the sync response.
- const bb = new flatbuffers.ByteBuffer(response);
- const base = msg.Base.getRootAsBase(bb);
- const err = maybeError(base);
- if (err != null) {
- return Promise.reject(err);
- } else {
- return Promise.resolve(base);
- }
- }
- return response;
- }
-}
-
-// @internal
-export function sendAsync(
- builder: flatbuffers.Builder,
- innerType: msg.Any,
- inner: flatbuffers.Offset,
- data?: ArrayBufferView
-): Promise<msg.Base> {
- return sendInternal(builder, innerType, inner, data, false);
-}
-
-// @internal
-export function sendSync(
- builder: flatbuffers.Builder,
- innerType: msg.Any,
- inner: flatbuffers.Offset,
- data?: ArrayBufferView
-): null | msg.Base {
- const response = sendInternal(builder, innerType, inner, data, true);
- if (response!.length === 0) {
- return null;
- } else {
- const bb = new flatbuffers.ByteBuffer(response!);
- const baseRes = msg.Base.getRootAsBase(bb);
- maybeThrowError(baseRes);
- return baseRes;
- }
-}
-
-function maybeError(base: msg.Base): null | DenoError<msg.ErrorKind> {
- const kind = base.errorKind();
- if (kind === msg.ErrorKind.NoError) {
- return null;
- } else {
- return new DenoError(kind, base.error()!);
- }
-}
-
-function maybeThrowError(base: msg.Base): void {
- const err = maybeError(base);
- if (err != null) {
- throw err;
- }
-}