diff options
Diffstat (limited to 'js')
-rw-r--r-- | js/console.ts | 6 | ||||
-rw-r--r-- | js/deno.d.ts | 4 | ||||
-rw-r--r-- | js/dispatch.ts | 55 | ||||
-rw-r--r-- | js/globals.ts | 28 | ||||
-rw-r--r-- | js/main.ts | 55 | ||||
-rw-r--r-- | js/msg_generated.ts | 1558 | ||||
-rw-r--r-- | js/os.ts | 89 | ||||
-rw-r--r-- | js/runtime.ts | 31 | ||||
-rw-r--r-- | js/util.ts | 5 |
9 files changed, 1671 insertions, 160 deletions
diff --git a/js/console.ts b/js/console.ts index af92c8871..1ec727f14 100644 --- a/js/console.ts +++ b/js/console.ts @@ -1,5 +1,3 @@ -const print = V8Worker2.print; - // tslint:disable-next-line:no-any type ConsoleContext = Set<any>; @@ -102,7 +100,7 @@ function stringifyArgs(args: any[]): string { export class Console { // tslint:disable-next-line:no-any log(...args: any[]): void { - print(stringifyArgs(args)); + deno.print(stringifyArgs(args)); } debug = this.log; @@ -110,7 +108,7 @@ export class Console { // tslint:disable-next-line:no-any warn(...args: any[]): void { - print(`ERROR: ${stringifyArgs(args)}`); + deno.print(`ERROR: ${stringifyArgs(args)}`); } error = this.warn; diff --git a/js/deno.d.ts b/js/deno.d.ts index 9b7ca31a2..748ee32ce 100644 --- a/js/deno.d.ts +++ b/js/deno.d.ts @@ -1,9 +1,9 @@ // Copyright 2018 Ryan Dahl <ry@tinyclouds.org> // All rights reserved. MIT License. -type MessageCallback = (msg: ArrayBuffer) => void; +type MessageCallback = (channel: string, msg: ArrayBuffer) => void; interface Deno { - recv(channel: string, cb: MessageCallback): void; + recv(cb: MessageCallback): void; send(channel: string, msg: ArrayBuffer): null | ArrayBuffer; print(x: string): void; } diff --git a/js/dispatch.ts b/js/dispatch.ts index a83e5a0e5..6668014b9 100644 --- a/js/dispatch.ts +++ b/js/dispatch.ts @@ -1,13 +1,11 @@ // Copyright 2018 Ryan Dahl <ry@tinyclouds.org> // All rights reserved. MIT License. import { typedArrayToArrayBuffer } from "./util"; -import { _global } from "./globals"; -import { deno as pb } from "./msg.pb"; +import { deno as fbs } from "./msg_generated"; export type MessageCallback = (msg: Uint8Array) => void; //type MessageStructCallback = (msg: pb.IMsg) => void; -const send = V8Worker2.send; const channels = new Map<string, MessageCallback[]>(); export function sub(channel: string, cb: MessageCallback): void { @@ -19,55 +17,14 @@ export function sub(channel: string, cb: MessageCallback): void { subscribers.push(cb); } -/* -export function subMsg(channel: string, cb: MessageStructCallback): void { - sub(channel, (payload: Uint8Array) => { - const msg = pb.Msg.decode(payload); - if (msg.error != null) { - f.onError(new Error(msg.error)); - } else { - cb(msg); - } - }); -} - */ - -export function pub(channel: string, payload: Uint8Array): null | ArrayBuffer { - const msg = pb.BaseMsg.fromObject({ channel, payload }); - const ui8 = pb.BaseMsg.encode(msg).finish(); - const ab = typedArrayToArrayBuffer(ui8); - return send(ab); -} - -// Internal version of "pub". -// TODO add internal version of "sub" -export function pubInternal(channel: string, obj: pb.IMsg): null | pb.Msg { - const msg = pb.Msg.fromObject(obj); - const ui8 = pb.Msg.encode(msg).finish(); - const resBuf = pub(channel, ui8); - if (resBuf != null && resBuf.byteLength > 0) { - const res = pb.Msg.decode(new Uint8Array(resBuf)); - if (res != null && res.error != null && res.error.length > 0) { - throw Error(res.error); - } - return res; - } else { - return null; - } -} - -V8Worker2.recv((ab: ArrayBuffer) => { - const msg = pb.BaseMsg.decode(new Uint8Array(ab)); - const subscribers = channels.get(msg.channel); +deno.recv((channel: string, ab: ArrayBuffer) => { + const subscribers = channels.get(channel); if (subscribers == null) { - throw Error(`No subscribers for channel "${msg.channel}".`); + throw Error(`No subscribers for channel "${channel}".`); } + const ui8 = new Uint8Array(ab); for (const subscriber of subscribers) { - subscriber(msg.payload); + subscriber(ui8); } }); - -// Delete the V8Worker2 from the global object, so that no one else can receive -// messages. -_global["V8Worker2"] = null; diff --git a/js/globals.ts b/js/globals.ts index cca72d172..81e6bdf12 100644 --- a/js/globals.ts +++ b/js/globals.ts @@ -1,6 +1,5 @@ // Copyright 2018 Ryan Dahl <ry@tinyclouds.org> // All rights reserved. MIT License. -import * as timer from "./timers"; // If you use the eval function indirectly, by invoking it via a reference // other than eval, as of ECMAScript 5 it works in the global scope rather than @@ -11,22 +10,23 @@ export const globalEval = eval; // A reference to the global object. // TODO The underscore is because it's conflicting with @types/node. -export const _global = globalEval("this"); +export const window = globalEval("this"); -_global["window"] = _global; // Create a window object. -import "./url"; +window["window"] = window; // Create a window object. +// import "./url"; -_global["setTimeout"] = timer.setTimeout; -_global["setInterval"] = timer.setInterval; -_global["clearTimeout"] = timer.clearTimer; -_global["clearInterval"] = timer.clearTimer; +// import * as timer from "./timers"; +// window["setTimeout"] = timer.setTimeout; +// window["setInterval"] = timer.setInterval; +// window["clearTimeout"] = timer.clearTimer; +// window["clearInterval"] = timer.clearTimer; import { Console } from "./console"; -_global["console"] = new Console(); +window["console"] = new Console(); -import { fetch } from "./fetch"; -_global["fetch"] = fetch; +// import { fetch } from "./fetch"; +// window["fetch"] = fetch; -import { TextEncoder, TextDecoder } from "text-encoding"; -_global["TextEncoder"] = TextEncoder; -_global["TextDecoder"] = TextDecoder; +// import { TextEncoder, TextDecoder } from "text-encoding"; +// window["TextEncoder"] = TextEncoder; +// window["TextDecoder"] = TextDecoder; diff --git a/js/main.ts b/js/main.ts index 43bd0e03f..6ba38f669 100644 --- a/js/main.ts +++ b/js/main.ts @@ -4,30 +4,59 @@ import * as ts from "typescript"; import { flatbuffers } from "flatbuffers"; import { deno as fbs } from "./msg_generated"; +import { assert } from "./util"; + +// import * as runtime from "./runtime"; const globalEval = eval; const window = globalEval("this"); +function startMsg(): ArrayBuffer { + const builder = new flatbuffers.Builder(); + const msg = fbs.Start.createStart(builder, 0); + fbs.Base.startBase(builder); + fbs.Base.addMsg(builder, msg); + fbs.Base.addMsgType(builder, fbs.Any.Start); + builder.finish(fbs.Base.endBase(builder)); + return typedArrayToArrayBuffer(builder.asUint8Array()); +} + window["denoMain"] = () => { deno.print(`ts.version: ${ts.version}`); - const res = deno.send("startDeno2", emptyArrayBuffer()); - // deno.print(`after`); - const resUi8 = new Uint8Array(res); - const bb = new flatbuffers.ByteBuffer(resUi8); - const msg = fbs.Msg.getRootAsMsg(bb); + // 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 res = deno.send("start", startMsg()); + + // 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; + } - // startDebugFlag: debugFlag, - // startMainJs: mainJs, - // startMainMap: mainMap - const cwd = msg.startCwd(); + // Deserialize res into startResMsg. + const bb = new flatbuffers.ByteBuffer(new Uint8Array(res)); + const base = fbs.Base.getRootAsBase(bb); + assert(fbs.Any.StartRes === base.msgType()); + const startResMsg = new fbs.StartRes(); + assert(base.msg(startResMsg) != null); + + const cwd = startResMsg.cwd(); deno.print(`cwd: ${cwd}`); const argv: string[] = []; - for (let i = 0; i < msg.startArgvLength(); i++) { - argv.push(msg.startArgv(i)); + for (let i = 0; i < startResMsg.argvLength(); i++) { + argv.push(startResMsg.argv(i)); } deno.print(`argv ${argv}`); + + /* TODO(ry) Uncomment to test further message passing. + const inputFn = argv[0]; + const mod = runtime.resolveModule(inputFn, `${cwd}/`); + mod.compileAndRun(); + */ }; function typedArrayToArrayBuffer(ta: Uint8Array): ArrayBuffer { @@ -36,7 +65,3 @@ function typedArrayToArrayBuffer(ta: Uint8Array): ArrayBuffer { ta.byteOffset + ta.byteLength ) as ArrayBuffer; } - -function emptyArrayBuffer(): ArrayBuffer { - return typedArrayToArrayBuffer(new Uint8Array([])); -} diff --git a/js/msg_generated.ts b/js/msg_generated.ts index aa8f00012..e7e3a1f8e 100644 --- a/js/msg_generated.ts +++ b/js/msg_generated.ts @@ -4,15 +4,29 @@ * @enum */ export namespace deno{ -export enum Command{ - START= 0 +export enum Any{ + NONE= 0, + Start= 1, + StartRes= 2, + CodeFetch= 3, + CodeFetchRes= 4, + CodeCache= 5, + Exit= 6, + TimerStart= 7, + TimerReady= 8, + TimerClear= 9, + FetchReq= 10, + FetchRes= 11, + ReadFileSync= 12, + ReadFileSyncRes= 13, + WriteFileSync= 14 }}; /** * @constructor */ export namespace deno{ -export class Msg { +export class Base { /** * @type {flatbuffers.ByteBuffer} */ @@ -25,9 +39,9 @@ export class Msg { /** * @param {number} i * @param {flatbuffers.ByteBuffer} bb - * @returns {Msg} + * @returns {Base} */ -__init(i:number, bb:flatbuffers.ByteBuffer):Msg { +__init(i:number, bb:flatbuffers.ByteBuffer):Base { this.bb_pos = i; this.bb = bb; return this; @@ -35,27 +49,136 @@ __init(i:number, bb:flatbuffers.ByteBuffer):Msg { /** * @param {flatbuffers.ByteBuffer} bb - * @param {Msg=} obj - * @returns {Msg} + * @param {Base=} obj + * @returns {Base} */ -static getRootAsMsg(bb:flatbuffers.ByteBuffer, obj?:Msg):Msg { - return (obj || new Msg).__init(bb.readInt32(bb.position()) + bb.position(), bb); +static getRootAsBase(bb:flatbuffers.ByteBuffer, obj?:Base):Base { + return (obj || new Base).__init(bb.readInt32(bb.position()) + bb.position(), bb); }; /** - * @returns {deno.Command} + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} */ -command():deno.Command { +error():string|null +error(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +error(optionalEncoding?:any):string|Uint8Array|null { var offset = this.bb!.__offset(this.bb_pos, 4); - return offset ? /** @type {deno.Command} */ (this.bb!.readInt8(this.bb_pos + offset)) : deno.Command.START; + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; }; /** - * @param {deno.Command} value + * @returns {deno.Any} + */ +msgType():deno.Any { + var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? /** @type {deno.Any} */ (this.bb!.readUint8(this.bb_pos + offset)) : deno.Any.NONE; +}; + +/** + * @param {deno.Any} value * @returns {boolean} */ -mutate_command(value:deno.Command):boolean { - var offset = this.bb!.__offset(this.bb_pos, 4); +mutate_msg_type(value:deno.Any):boolean { + var offset = this.bb!.__offset(this.bb_pos, 6); + + if (offset === 0) { + return false; + } + + this.bb!.writeUint8(this.bb_pos + offset, value); + return true; +}; + +/** + * @param {flatbuffers.Table} obj + * @returns {?flatbuffers.Table} + */ +msg<T extends flatbuffers.Table>(obj:T):T|null { + var offset = this.bb!.__offset(this.bb_pos, 8); + return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null; +}; + +/** + * @param {flatbuffers.Builder} builder + */ +static startBase(builder:flatbuffers.Builder) { + builder.startObject(3); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} errorOffset + */ +static addError(builder:flatbuffers.Builder, errorOffset:flatbuffers.Offset) { + builder.addFieldOffset(0, errorOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {deno.Any} msgType + */ +static addMsgType(builder:flatbuffers.Builder, msgType:deno.Any) { + builder.addFieldInt8(1, msgType, deno.Any.NONE); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} msgOffset + */ +static addMsg(builder:flatbuffers.Builder, msgOffset:flatbuffers.Offset) { + builder.addFieldOffset(2, msgOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @returns {flatbuffers.Offset} + */ +static endBase(builder:flatbuffers.Builder):flatbuffers.Offset { + var offset = builder.endObject(); + return offset; +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class Start { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {Start} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):Start { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @returns {number} + */ +unused():number { + return this.bb!.readInt8(this.bb_pos); +}; + +/** + * @param {number} value + * @returns {boolean} + */ +mutate_unused(value:number):boolean { + var offset = this.bb!.__offset(this.bb_pos, 0); if (offset === 0) { return false; @@ -66,24 +189,1000 @@ mutate_command(value:deno.Command):boolean { }; /** + * @param {flatbuffers.Builder} builder + * @param {number} unused + * @returns {flatbuffers.Offset} + */ +static createStart(builder:flatbuffers.Builder, unused: number):flatbuffers.Offset { + builder.prep(1, 1); + builder.writeInt8(unused); + return builder.offset(); +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class StartRes { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {StartRes} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):StartRes { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @param {flatbuffers.ByteBuffer} bb + * @param {StartRes=} obj + * @returns {StartRes} + */ +static getRootAsStartRes(bb:flatbuffers.ByteBuffer, obj?:StartRes):StartRes { + return (obj || new StartRes).__init(bb.readInt32(bb.position()) + bb.position(), bb); +}; + +/** * @param {flatbuffers.Encoding=} optionalEncoding * @returns {string|Uint8Array|null} */ -startCwd():string|null -startCwd(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null -startCwd(optionalEncoding?:any):string|Uint8Array|null { +cwd():string|null +cwd(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +cwd(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 4); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {number} index + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array} + */ +argv(index: number):string +argv(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array +argv(index: number,optionalEncoding?:any):string|Uint8Array|null { var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null; +}; + +/** + * @returns {number} + */ +argvLength():number { + var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0; +}; + +/** + * @returns {boolean} + */ +debugFlag():boolean { + var offset = this.bb!.__offset(this.bb_pos, 8); + return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false; +}; + +/** + * @param {boolean} value + * @returns {boolean} + */ +mutate_debug_flag(value:boolean):boolean { + var offset = this.bb!.__offset(this.bb_pos, 8); + + if (offset === 0) { + return false; + } + + this.bb!.writeInt8(this.bb_pos + offset, +value); + return true; +}; + +/** + * @param {flatbuffers.Builder} builder + */ +static startStartRes(builder:flatbuffers.Builder) { + builder.startObject(3); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} cwdOffset + */ +static addCwd(builder:flatbuffers.Builder, cwdOffset:flatbuffers.Offset) { + builder.addFieldOffset(0, cwdOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} argvOffset + */ +static addArgv(builder:flatbuffers.Builder, argvOffset:flatbuffers.Offset) { + builder.addFieldOffset(1, argvOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {Array.<flatbuffers.Offset>} data + * @returns {flatbuffers.Offset} + */ +static createArgvVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset { + builder.startVector(4, data.length, 4); + for (var i = data.length - 1; i >= 0; i--) { + builder.addOffset(data[i]); + } + return builder.endVector(); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} numElems + */ +static startArgvVector(builder:flatbuffers.Builder, numElems:number) { + builder.startVector(4, numElems, 4); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {boolean} debugFlag + */ +static addDebugFlag(builder:flatbuffers.Builder, debugFlag:boolean) { + builder.addFieldInt8(2, +debugFlag, +false); +}; + +/** + * @param {flatbuffers.Builder} builder + * @returns {flatbuffers.Offset} + */ +static endStartRes(builder:flatbuffers.Builder):flatbuffers.Offset { + var offset = builder.endObject(); + return offset; +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class CodeFetch { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {CodeFetch} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):CodeFetch { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @param {flatbuffers.ByteBuffer} bb + * @param {CodeFetch=} obj + * @returns {CodeFetch} + */ +static getRootAsCodeFetch(bb:flatbuffers.ByteBuffer, obj?:CodeFetch):CodeFetch { + return (obj || new CodeFetch).__init(bb.readInt32(bb.position()) + bb.position(), bb); +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +moduleSpecifier():string|null +moduleSpecifier(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +moduleSpecifier(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 4); return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; }; /** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +containingFile():string|null +containingFile(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +containingFile(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {flatbuffers.Builder} builder + */ +static startCodeFetch(builder:flatbuffers.Builder) { + builder.startObject(2); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} moduleSpecifierOffset + */ +static addModuleSpecifier(builder:flatbuffers.Builder, moduleSpecifierOffset:flatbuffers.Offset) { + builder.addFieldOffset(0, moduleSpecifierOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} containingFileOffset + */ +static addContainingFile(builder:flatbuffers.Builder, containingFileOffset:flatbuffers.Offset) { + builder.addFieldOffset(1, containingFileOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @returns {flatbuffers.Offset} + */ +static endCodeFetch(builder:flatbuffers.Builder):flatbuffers.Offset { + var offset = builder.endObject(); + return offset; +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class CodeFetchRes { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {CodeFetchRes} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):CodeFetchRes { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @param {flatbuffers.ByteBuffer} bb + * @param {CodeFetchRes=} obj + * @returns {CodeFetchRes} + */ +static getRootAsCodeFetchRes(bb:flatbuffers.ByteBuffer, obj?:CodeFetchRes):CodeFetchRes { + return (obj || new CodeFetchRes).__init(bb.readInt32(bb.position()) + bb.position(), bb); +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +moduleName():string|null +moduleName(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +moduleName(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 4); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +filename():string|null +filename(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +filename(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +sourceCode():string|null +sourceCode(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +sourceCode(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 8); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +outputCode():string|null +outputCode(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +outputCode(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 10); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {flatbuffers.Builder} builder + */ +static startCodeFetchRes(builder:flatbuffers.Builder) { + builder.startObject(4); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} moduleNameOffset + */ +static addModuleName(builder:flatbuffers.Builder, moduleNameOffset:flatbuffers.Offset) { + builder.addFieldOffset(0, moduleNameOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} filenameOffset + */ +static addFilename(builder:flatbuffers.Builder, filenameOffset:flatbuffers.Offset) { + builder.addFieldOffset(1, filenameOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} sourceCodeOffset + */ +static addSourceCode(builder:flatbuffers.Builder, sourceCodeOffset:flatbuffers.Offset) { + builder.addFieldOffset(2, sourceCodeOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} outputCodeOffset + */ +static addOutputCode(builder:flatbuffers.Builder, outputCodeOffset:flatbuffers.Offset) { + builder.addFieldOffset(3, outputCodeOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @returns {flatbuffers.Offset} + */ +static endCodeFetchRes(builder:flatbuffers.Builder):flatbuffers.Offset { + var offset = builder.endObject(); + return offset; +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class CodeCache { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {CodeCache} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):CodeCache { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @param {flatbuffers.ByteBuffer} bb + * @param {CodeCache=} obj + * @returns {CodeCache} + */ +static getRootAsCodeCache(bb:flatbuffers.ByteBuffer, obj?:CodeCache):CodeCache { + return (obj || new CodeCache).__init(bb.readInt32(bb.position()) + bb.position(), bb); +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +filename():string|null +filename(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +filename(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 4); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +sourceCode():string|null +sourceCode(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +sourceCode(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +outputCode():string|null +outputCode(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +outputCode(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 8); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {flatbuffers.Builder} builder + */ +static startCodeCache(builder:flatbuffers.Builder) { + builder.startObject(3); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} filenameOffset + */ +static addFilename(builder:flatbuffers.Builder, filenameOffset:flatbuffers.Offset) { + builder.addFieldOffset(0, filenameOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} sourceCodeOffset + */ +static addSourceCode(builder:flatbuffers.Builder, sourceCodeOffset:flatbuffers.Offset) { + builder.addFieldOffset(1, sourceCodeOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} outputCodeOffset + */ +static addOutputCode(builder:flatbuffers.Builder, outputCodeOffset:flatbuffers.Offset) { + builder.addFieldOffset(2, outputCodeOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @returns {flatbuffers.Offset} + */ +static endCodeCache(builder:flatbuffers.Builder):flatbuffers.Offset { + var offset = builder.endObject(); + return offset; +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class Exit { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {Exit} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):Exit { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @returns {number} + */ +code():number { + return this.bb!.readInt32(this.bb_pos); +}; + +/** + * @param {number} value + * @returns {boolean} + */ +mutate_code(value:number):boolean { + var offset = this.bb!.__offset(this.bb_pos, 0); + + if (offset === 0) { + return false; + } + + this.bb!.writeInt32(this.bb_pos + offset, value); + return true; +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} code + * @returns {flatbuffers.Offset} + */ +static createExit(builder:flatbuffers.Builder, code: number):flatbuffers.Offset { + builder.prep(4, 4); + builder.writeInt32(code); + return builder.offset(); +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class TimerStart { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {TimerStart} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):TimerStart { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @returns {number} + */ +id():number { + return this.bb!.readUint32(this.bb_pos); +}; + +/** + * @param {number} value + * @returns {boolean} + */ +mutate_id(value:number):boolean { + var offset = this.bb!.__offset(this.bb_pos, 0); + + if (offset === 0) { + return false; + } + + this.bb!.writeUint32(this.bb_pos + offset, value); + return true; +}; + +/** + * @returns {boolean} + */ +interval():boolean { + return !!this.bb!.readInt8(this.bb_pos + 4); +}; + +/** + * @param {boolean} value + * @returns {boolean} + */ +mutate_interval(value:boolean):boolean { + var offset = this.bb!.__offset(this.bb_pos, 4); + + if (offset === 0) { + return false; + } + + this.bb!.writeInt8(this.bb_pos + offset, +value); + return true; +}; + +/** + * @returns {number} + */ +delay():number { + return this.bb!.readInt32(this.bb_pos + 8); +}; + +/** + * @param {number} value + * @returns {boolean} + */ +mutate_delay(value:number):boolean { + var offset = this.bb!.__offset(this.bb_pos, 8); + + if (offset === 0) { + return false; + } + + this.bb!.writeInt32(this.bb_pos + offset, value); + return true; +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} id + * @param {boolean} interval + * @param {number} delay + * @returns {flatbuffers.Offset} + */ +static createTimerStart(builder:flatbuffers.Builder, id: number, interval: boolean, delay: number):flatbuffers.Offset { + builder.prep(4, 12); + builder.writeInt32(delay); + builder.pad(3); + builder.writeInt8(+interval); + builder.writeInt32(id); + return builder.offset(); +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class TimerReady { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {TimerReady} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):TimerReady { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @returns {number} + */ +id():number { + return this.bb!.readUint32(this.bb_pos); +}; + +/** + * @param {number} value + * @returns {boolean} + */ +mutate_id(value:number):boolean { + var offset = this.bb!.__offset(this.bb_pos, 0); + + if (offset === 0) { + return false; + } + + this.bb!.writeUint32(this.bb_pos + offset, value); + return true; +}; + +/** + * @returns {boolean} + */ +done():boolean { + return !!this.bb!.readInt8(this.bb_pos + 4); +}; + +/** + * @param {boolean} value + * @returns {boolean} + */ +mutate_done(value:boolean):boolean { + var offset = this.bb!.__offset(this.bb_pos, 4); + + if (offset === 0) { + return false; + } + + this.bb!.writeInt8(this.bb_pos + offset, +value); + return true; +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} id + * @param {boolean} done + * @returns {flatbuffers.Offset} + */ +static createTimerReady(builder:flatbuffers.Builder, id: number, done: boolean):flatbuffers.Offset { + builder.prep(4, 8); + builder.pad(3); + builder.writeInt8(+done); + builder.writeInt32(id); + return builder.offset(); +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class TimerClear { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {TimerClear} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):TimerClear { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @returns {number} + */ +id():number { + return this.bb!.readUint32(this.bb_pos); +}; + +/** + * @param {number} value + * @returns {boolean} + */ +mutate_id(value:number):boolean { + var offset = this.bb!.__offset(this.bb_pos, 0); + + if (offset === 0) { + return false; + } + + this.bb!.writeUint32(this.bb_pos + offset, value); + return true; +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} id + * @returns {flatbuffers.Offset} + */ +static createTimerClear(builder:flatbuffers.Builder, id: number):flatbuffers.Offset { + builder.prep(4, 4); + builder.writeInt32(id); + return builder.offset(); +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class FetchReq { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {FetchReq} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):FetchReq { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @param {flatbuffers.ByteBuffer} bb + * @param {FetchReq=} obj + * @returns {FetchReq} + */ +static getRootAsFetchReq(bb:flatbuffers.ByteBuffer, obj?:FetchReq):FetchReq { + return (obj || new FetchReq).__init(bb.readInt32(bb.position()) + bb.position(), bb); +}; + +/** + * @returns {number} + */ +id():number { + var offset = this.bb!.__offset(this.bb_pos, 4); + return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0; +}; + +/** + * @param {number} value + * @returns {boolean} + */ +mutate_id(value:number):boolean { + var offset = this.bb!.__offset(this.bb_pos, 4); + + if (offset === 0) { + return false; + } + + this.bb!.writeUint32(this.bb_pos + offset, value); + return true; +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +url():string|null +url(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +url(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {flatbuffers.Builder} builder + */ +static startFetchReq(builder:flatbuffers.Builder) { + builder.startObject(2); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} id + */ +static addId(builder:flatbuffers.Builder, id:number) { + builder.addFieldInt32(0, id, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} urlOffset + */ +static addUrl(builder:flatbuffers.Builder, urlOffset:flatbuffers.Offset) { + builder.addFieldOffset(1, urlOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @returns {flatbuffers.Offset} + */ +static endFetchReq(builder:flatbuffers.Builder):flatbuffers.Offset { + var offset = builder.endObject(); + return offset; +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class FetchRes { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {FetchRes} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):FetchRes { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @param {flatbuffers.ByteBuffer} bb + * @param {FetchRes=} obj + * @returns {FetchRes} + */ +static getRootAsFetchRes(bb:flatbuffers.ByteBuffer, obj?:FetchRes):FetchRes { + return (obj || new FetchRes).__init(bb.readInt32(bb.position()) + bb.position(), bb); +}; + +/** + * @returns {number} + */ +id():number { + var offset = this.bb!.__offset(this.bb_pos, 4); + return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0; +}; + +/** + * @param {number} value + * @returns {boolean} + */ +mutate_id(value:number):boolean { + var offset = this.bb!.__offset(this.bb_pos, 4); + + if (offset === 0) { + return false; + } + + this.bb!.writeUint32(this.bb_pos + offset, value); + return true; +}; + +/** + * @returns {number} + */ +status():number { + var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0; +}; + +/** + * @param {number} value + * @returns {boolean} + */ +mutate_status(value:number):boolean { + var offset = this.bb!.__offset(this.bb_pos, 6); + + if (offset === 0) { + return false; + } + + this.bb!.writeInt32(this.bb_pos + offset, value); + return true; +}; + +/** * @param {number} index * @param {flatbuffers.Encoding=} optionalEncoding * @returns {string|Uint8Array} */ -startArgv(index: number):string -startArgv(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array -startArgv(index: number,optionalEncoding?:any):string|Uint8Array|null { +headerLine(index: number):string +headerLine(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array +headerLine(index: number,optionalEncoding?:any):string|Uint8Array|null { var offset = this.bb!.__offset(this.bb_pos, 8); return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null; }; @@ -91,40 +1190,65 @@ startArgv(index: number,optionalEncoding?:any):string|Uint8Array|null { /** * @returns {number} */ -startArgvLength():number { +headerLineLength():number { var offset = this.bb!.__offset(this.bb_pos, 8); return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0; }; /** + * @param {number} index + * @returns {number} + */ +body(index: number):number|null { + var offset = this.bb!.__offset(this.bb_pos, 10); + return offset ? this.bb!.readInt8(this.bb!.__vector(this.bb_pos + offset) + index) : 0; +}; + +/** + * @returns {number} + */ +bodyLength():number { + var offset = this.bb!.__offset(this.bb_pos, 10); + return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0; +}; + +/** + * @returns {Int8Array} + */ +bodyArray():Int8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 10); + return offset ? new Int8Array(this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset), this.bb!.__vector_len(this.bb_pos + offset)) : null; +}; + +/** * @param {flatbuffers.Builder} builder */ -static startMsg(builder:flatbuffers.Builder) { - builder.startObject(3); +static startFetchRes(builder:flatbuffers.Builder) { + builder.startObject(4); }; /** * @param {flatbuffers.Builder} builder - * @param {deno.Command} command + * @param {number} id */ -static addCommand(builder:flatbuffers.Builder, command:deno.Command) { - builder.addFieldInt8(0, command, deno.Command.START); +static addId(builder:flatbuffers.Builder, id:number) { + builder.addFieldInt32(0, id, 0); }; /** * @param {flatbuffers.Builder} builder - * @param {flatbuffers.Offset} startCwdOffset + * @param {number} status */ -static addStartCwd(builder:flatbuffers.Builder, startCwdOffset:flatbuffers.Offset) { - builder.addFieldOffset(1, startCwdOffset, 0); +static addStatus(builder:flatbuffers.Builder, status:number) { + builder.addFieldInt32(1, status, 0); }; /** * @param {flatbuffers.Builder} builder - * @param {flatbuffers.Offset} startArgvOffset + * @param {flatbuffers.Offset} headerLineOffset */ -static addStartArgv(builder:flatbuffers.Builder, startArgvOffset:flatbuffers.Offset) { - builder.addFieldOffset(2, startArgvOffset, 0); +static addHeaderLine(builder:flatbuffers.Builder, headerLineOffset:flatbuffers.Offset) { + builder.addFieldOffset(2, headerLineOffset, 0); }; /** @@ -132,7 +1256,7 @@ static addStartArgv(builder:flatbuffers.Builder, startArgvOffset:flatbuffers.Off * @param {Array.<flatbuffers.Offset>} data * @returns {flatbuffers.Offset} */ -static createStartArgvVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset { +static createHeaderLineVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset { builder.startVector(4, data.length, 4); for (var i = data.length - 1; i >= 0; i--) { builder.addOffset(data[i]); @@ -144,15 +1268,377 @@ static createStartArgvVector(builder:flatbuffers.Builder, data:flatbuffers.Offse * @param {flatbuffers.Builder} builder * @param {number} numElems */ -static startStartArgvVector(builder:flatbuffers.Builder, numElems:number) { +static startHeaderLineVector(builder:flatbuffers.Builder, numElems:number) { builder.startVector(4, numElems, 4); }; /** * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} bodyOffset + */ +static addBody(builder:flatbuffers.Builder, bodyOffset:flatbuffers.Offset) { + builder.addFieldOffset(3, bodyOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {Array.<number>} data + * @returns {flatbuffers.Offset} + */ +static createBodyVector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset { + builder.startVector(1, data.length, 1); + for (var i = data.length - 1; i >= 0; i--) { + builder.addInt8(data[i]); + } + return builder.endVector(); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} numElems + */ +static startBodyVector(builder:flatbuffers.Builder, numElems:number) { + builder.startVector(1, numElems, 1); +}; + +/** + * @param {flatbuffers.Builder} builder + * @returns {flatbuffers.Offset} + */ +static endFetchRes(builder:flatbuffers.Builder):flatbuffers.Offset { + var offset = builder.endObject(); + return offset; +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class ReadFileSync { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {ReadFileSync} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):ReadFileSync { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @param {flatbuffers.ByteBuffer} bb + * @param {ReadFileSync=} obj + * @returns {ReadFileSync} + */ +static getRootAsReadFileSync(bb:flatbuffers.ByteBuffer, obj?:ReadFileSync):ReadFileSync { + return (obj || new ReadFileSync).__init(bb.readInt32(bb.position()) + bb.position(), bb); +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +filename():string|null +filename(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +filename(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 4); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {flatbuffers.Builder} builder + */ +static startReadFileSync(builder:flatbuffers.Builder) { + builder.startObject(1); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} filenameOffset + */ +static addFilename(builder:flatbuffers.Builder, filenameOffset:flatbuffers.Offset) { + builder.addFieldOffset(0, filenameOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @returns {flatbuffers.Offset} + */ +static endReadFileSync(builder:flatbuffers.Builder):flatbuffers.Offset { + var offset = builder.endObject(); + return offset; +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class ReadFileSyncRes { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {ReadFileSyncRes} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):ReadFileSyncRes { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @param {flatbuffers.ByteBuffer} bb + * @param {ReadFileSyncRes=} obj + * @returns {ReadFileSyncRes} + */ +static getRootAsReadFileSyncRes(bb:flatbuffers.ByteBuffer, obj?:ReadFileSyncRes):ReadFileSyncRes { + return (obj || new ReadFileSyncRes).__init(bb.readInt32(bb.position()) + bb.position(), bb); +}; + +/** + * @param {number} index + * @returns {number} + */ +data(index: number):number|null { + var offset = this.bb!.__offset(this.bb_pos, 4); + return offset ? this.bb!.readInt8(this.bb!.__vector(this.bb_pos + offset) + index) : 0; +}; + +/** + * @returns {number} + */ +dataLength():number { + var offset = this.bb!.__offset(this.bb_pos, 4); + return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0; +}; + +/** + * @returns {Int8Array} + */ +dataArray():Int8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 4); + return offset ? new Int8Array(this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset), this.bb!.__vector_len(this.bb_pos + offset)) : null; +}; + +/** + * @param {flatbuffers.Builder} builder + */ +static startReadFileSyncRes(builder:flatbuffers.Builder) { + builder.startObject(1); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} dataOffset + */ +static addData(builder:flatbuffers.Builder, dataOffset:flatbuffers.Offset) { + builder.addFieldOffset(0, dataOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {Array.<number>} data + * @returns {flatbuffers.Offset} + */ +static createDataVector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset { + builder.startVector(1, data.length, 1); + for (var i = data.length - 1; i >= 0; i--) { + builder.addInt8(data[i]); + } + return builder.endVector(); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} numElems + */ +static startDataVector(builder:flatbuffers.Builder, numElems:number) { + builder.startVector(1, numElems, 1); +}; + +/** + * @param {flatbuffers.Builder} builder + * @returns {flatbuffers.Offset} + */ +static endReadFileSyncRes(builder:flatbuffers.Builder):flatbuffers.Offset { + var offset = builder.endObject(); + return offset; +}; + +} +} +/** + * @constructor + */ +export namespace deno{ +export class WriteFileSync { + /** + * @type {flatbuffers.ByteBuffer} + */ + bb: flatbuffers.ByteBuffer|null = null; + + /** + * @type {number} + */ + bb_pos:number = 0; +/** + * @param {number} i + * @param {flatbuffers.ByteBuffer} bb + * @returns {WriteFileSync} + */ +__init(i:number, bb:flatbuffers.ByteBuffer):WriteFileSync { + this.bb_pos = i; + this.bb = bb; + return this; +}; + +/** + * @param {flatbuffers.ByteBuffer} bb + * @param {WriteFileSync=} obj + * @returns {WriteFileSync} + */ +static getRootAsWriteFileSync(bb:flatbuffers.ByteBuffer, obj?:WriteFileSync):WriteFileSync { + return (obj || new WriteFileSync).__init(bb.readInt32(bb.position()) + bb.position(), bb); +}; + +/** + * @param {flatbuffers.Encoding=} optionalEncoding + * @returns {string|Uint8Array|null} + */ +filename():string|null +filename(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null +filename(optionalEncoding?:any):string|Uint8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 4); + return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null; +}; + +/** + * @param {number} index + * @returns {number} + */ +data(index: number):number|null { + var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? this.bb!.readInt8(this.bb!.__vector(this.bb_pos + offset) + index) : 0; +}; + +/** + * @returns {number} + */ +dataLength():number { + var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0; +}; + +/** + * @returns {Int8Array} + */ +dataArray():Int8Array|null { + var offset = this.bb!.__offset(this.bb_pos, 6); + return offset ? new Int8Array(this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset), this.bb!.__vector_len(this.bb_pos + offset)) : null; +}; + +/** + * @returns {number} + */ +perm():number { + var offset = this.bb!.__offset(this.bb_pos, 8); + return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0; +}; + +/** + * @param {number} value + * @returns {boolean} + */ +mutate_perm(value:number):boolean { + var offset = this.bb!.__offset(this.bb_pos, 8); + + if (offset === 0) { + return false; + } + + this.bb!.writeUint32(this.bb_pos + offset, value); + return true; +}; + +/** + * @param {flatbuffers.Builder} builder + */ +static startWriteFileSync(builder:flatbuffers.Builder) { + builder.startObject(3); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} filenameOffset + */ +static addFilename(builder:flatbuffers.Builder, filenameOffset:flatbuffers.Offset) { + builder.addFieldOffset(0, filenameOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} dataOffset + */ +static addData(builder:flatbuffers.Builder, dataOffset:flatbuffers.Offset) { + builder.addFieldOffset(1, dataOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {Array.<number>} data + * @returns {flatbuffers.Offset} + */ +static createDataVector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset { + builder.startVector(1, data.length, 1); + for (var i = data.length - 1; i >= 0; i--) { + builder.addInt8(data[i]); + } + return builder.endVector(); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} numElems + */ +static startDataVector(builder:flatbuffers.Builder, numElems:number) { + builder.startVector(1, numElems, 1); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} perm + */ +static addPerm(builder:flatbuffers.Builder, perm:number) { + builder.addFieldInt32(2, perm, 0); +}; + +/** + * @param {flatbuffers.Builder} builder * @returns {flatbuffers.Offset} */ -static endMsg(builder:flatbuffers.Builder):flatbuffers.Offset { +static endWriteFileSync(builder:flatbuffers.Builder):flatbuffers.Offset { var offset = builder.endObject(); return offset; }; @@ -1,32 +1,54 @@ // Copyright 2018 Ryan Dahl <ry@tinyclouds.org> // All rights reserved. MIT License. import { ModuleInfo } from "./types"; -import { pubInternal } from "./dispatch"; -import { deno as pb } from "./msg.pb"; -import { assert } from "./util"; +import { deno as fbs } from "./msg_generated"; +import { assert, typedArrayToArrayBuffer } from "./util"; +import { flatbuffers } from "flatbuffers"; export function exit(exitCode = 0): void { + assert(false, "Not Implemented"); + /* pubInternal("os", { - command: pb.Msg.Command.EXIT, + command: fbs.Command.EXIT, exitCode }); + */ } export function codeFetch( moduleSpecifier: string, containingFile: string ): ModuleInfo { - const res = pubInternal("os", { - command: pb.Msg.Command.CODE_FETCH, - codeFetchModuleSpecifier: moduleSpecifier, - codeFetchContainingFile: containingFile - }); - assert(res.command === pb.Msg.Command.CODE_FETCH_RES); + console.log("Hello from codeFetch"); + + // Send CodeFetch message + const builder = new flatbuffers.Builder(); + const moduleSpecifier_ = builder.createString(moduleSpecifier); + const containingFile_ = builder.createString(containingFile); + fbs.CodeFetch.startCodeFetch(builder); + 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 payload = typedArrayToArrayBuffer(builder.asUint8Array()); + const resBuf = deno.send("x", payload); + + console.log("CodeFetch sent"); + + // Process CodeFetchRes + const bb = new flatbuffers.ByteBuffer(new Uint8Array(resBuf)); + const baseRes = fbs.Base.getRootAsBase(bb); + assert(fbs.Any.CodeFetchRes === baseRes.msgType()); + const codeFetchRes = new fbs.CodeFetchRes(); + assert(baseRes.msg(codeFetchRes) != null); return { - moduleName: res.codeFetchResModuleName, - filename: res.codeFetchResFilename, - sourceCode: res.codeFetchResSourceCode, - outputCode: res.codeFetchResOutputCode + moduleName: codeFetchRes.moduleName(), + filename: codeFetchRes.filename(), + sourceCode: codeFetchRes.sourceCode(), + outputCode: codeFetchRes.outputCode(), }; } @@ -35,20 +57,40 @@ export function codeCache( sourceCode: string, outputCode: string ): void { - pubInternal("os", { - command: pb.Msg.Command.CODE_CACHE, - codeCacheFilename: filename, - codeCacheSourceCode: sourceCode, - codeCacheOutputCode: outputCode - }); + const builder = new flatbuffers.Builder(); + + const filename_ = builder.createString(filename); + const sourceCode_ = builder.createString(sourceCode); + const outputCode_ = builder.createString(outputCode); + + fbs.CodeCache.startCodeCache(builder); + fbs.CodeCache.addFilename(builder, filename_); + 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); + builder.finish(fbs.Base.endBase(builder)); + + // Maybe need to do another step? + // Base.finishBaseBuffer(builder, base); + + const payload = typedArrayToArrayBuffer(builder.asUint8Array()); + const resBuf = deno.send("x", payload); + assert(resBuf === null); } export function readFileSync(filename: string): Uint8Array { + assert(false, "Not Implemented"); + return null; + /* const res = pubInternal("os", { - command: pb.Msg.Command.READ_FILE_SYNC, + command: fbs.Command.READ_FILE_SYNC, readFileSyncFilename: filename }); return res.readFileSyncData; + */ } export function writeFileSync( @@ -56,10 +98,13 @@ export function writeFileSync( data: Uint8Array, perm: number ): void { + assert(false, "Not Implemented"); + /* pubInternal("os", { - command: pb.Msg.Command.WRITE_FILE_SYNC, + command: fbs.Command.WRITE_FILE_SYNC, writeFileSyncFilename: filename, writeFileSyncData: data, writeFileSyncPerm: perm }); + */ } diff --git a/js/runtime.ts b/js/runtime.ts index 46538c80f..1cd1bdad1 100644 --- a/js/runtime.ts +++ b/js/runtime.ts @@ -12,9 +12,9 @@ import * as ts from "typescript"; import * as util from "./util"; import { log } from "./util"; import * as os from "./os"; -import * as sourceMaps from "./v8_source_maps"; -import { _global, globalEval } from "./globals"; -import * as deno from "./deno"; +//import * as sourceMaps from "./v8_source_maps"; +import { window, globalEval } from "./globals"; +//import * as deno from "./deno"; const EOL = "\n"; @@ -22,18 +22,20 @@ const EOL = "\n"; export type AmdFactory = (...args: any[]) => undefined | object; export type AmdDefine = (deps: string[], factory: AmdFactory) => void; -// Uncaught exceptions are sent to window.onerror by v8worker2. -// https://git.io/vhOsf +/* +// Uncaught exceptions are sent to window.onerror by the privlaged binding. window.onerror = (message, source, lineno, colno, error) => { // TODO Currently there is a bug in v8_source_maps.ts that causes a segfault // if it is used within window.onerror. To workaround we uninstall the // Error.prepareStackTrace handler. Users will get unmapped stack traces on // uncaught exceptions until this issue is fixed. - Error.prepareStackTrace = null; + //Error.prepareStackTrace = null; console.log(error.message, error.stack); os.exit(1); }; +*/ +/* export function setup(mainJs: string, mainMap: string): void { sourceMaps.install({ installPrepareStackTrace: true, @@ -52,6 +54,7 @@ export function setup(mainJs: string, mainMap: string): void { } }); } +*/ // This class represents a module. We call it FileModule to make it explicit // that each module represents a single file. @@ -79,6 +82,7 @@ export class FileModule { } compileAndRun(): void { + util.log("compileAndRun", this.sourceCode); if (!this.outputCode) { // If there is no cached outputCode, then compile the code. util.assert( @@ -89,7 +93,6 @@ export class FileModule { this.outputCode = compiler.compile(this.fileName); os.codeCache(this.fileName, this.sourceCode, this.outputCode); } - util.log("compileAndRun", this.sourceCode); execute(this.fileName, this.outputCode); } @@ -142,17 +145,11 @@ export function resolveModule( moduleSpecifier: string, containingFile: string ): null | FileModule { - //util.log("resolveModule", { moduleSpecifier, containingFile }); + util.log("resolveModule", { moduleSpecifier, containingFile }); util.assert(moduleSpecifier != null && moduleSpecifier.length > 0); // We ask golang to sourceCodeFetch. It will load the sourceCode and if // there is any outputCode cached, it will return that as well. - let fetchResponse; - try { - fetchResponse = os.codeFetch(moduleSpecifier, containingFile); - } catch (e) { - // TODO Only catch "no such file or directory" errors. Need error codes. - return null; - } + const fetchResponse = os.codeFetch(moduleSpecifier, containingFile); const { filename, sourceCode, outputCode } = fetchResponse; if (sourceCode.length === 0) { return null; @@ -180,10 +177,10 @@ function resolveModuleName( function execute(fileName: string, outputCode: string): void { util.assert(outputCode && outputCode.length > 0); - _global["define"] = makeDefine(fileName); + window["define"] = makeDefine(fileName); outputCode += `\n//# sourceURL=${fileName}`; globalEval(outputCode); - _global["define"] = null; + window["define"] = null; } // This is a singleton class. Use Compiler.instance() to access. diff --git a/js/util.ts b/js/util.ts index 70cb79a55..9f87ab63d 100644 --- a/js/util.ts +++ b/js/util.ts @@ -1,6 +1,9 @@ // Copyright 2018 Ryan Dahl <ry@tinyclouds.org> // All rights reserved. MIT License. -import { debug } from "./main"; + +//import { debug } from "./main"; +const debug = true; + import { TypedArray } from "./types"; // Internal logging for deno. Use the "debug" variable above to control |