namespace deno; union Any { Start, StartRes, CodeFetch, CodeFetchRes, CodeCache, Exit, TimerStart, TimerReady, TimerClear, FetchReq, FetchRes, MakeTempDir, MakeTempDirRes, ReadFileSync, ReadFileSyncRes, StatSync, StatSyncRes, WriteFileSync, } enum ErrorKind: byte { NoError = 0, // io errors NotFound, PermissionDenied, ConnectionRefused, ConnectionReset, ConnectionAborted, NotConnected, AddrInUse, AddrNotAvailable, BrokenPipe, AlreadyExists, WouldBlock, InvalidInput, InvalidData, TimedOut, Interrupted, WriteZero, Other, UnexpectedEof, // url errors EmptyHost, IdnaError, InvalidPort, InvalidIpv4Address, InvalidIpv6Address, InvalidDomainCharacter, RelativeUrlWithoutBase, RelativeUrlWithCannotBeABaseBase, SetHostOnCannotBeABaseUrl, Overflow, // hyper errors HttpUser, HttpClosed, HttpCanceled, HttpParse, HttpOther, } table Base { cmd_id: uint32; error_kind: ErrorKind = NoError; error: string; msg: Any; } table Start { unused: int8; } table StartRes { cwd: string; argv: [string]; debug_flag: bool; } table CodeFetch { module_specifier: string; containing_file: string; } table CodeFetchRes { // If it's a non-http module, moduleName and filename will be the same. // For http modules, moduleName is its resolved http URL, and filename // is the location of the locally downloaded source code. module_name: string; filename: string; source_code: string; output_code: string; // Non-empty only if cached. } table CodeCache { filename: string; source_code: string; output_code: string; } table Exit { code: int; } table TimerStart { id: uint; interval: bool; delay: uint; } table TimerReady { id: uint; done: bool; } table TimerClear { id: uint; } table FetchReq { id: uint; url: string; // header_line: [string]; } table FetchRes { id: uint; status: int; header_line: [string]; body: [ubyte]; } table MakeTempDir { dir: string; prefix: string; suffix: string; } table MakeTempDirRes { path: string; } table ReadFileSync { filename: string; } table ReadFileSyncRes { data: [ubyte]; } table StatSync { filename: string; lstat: bool; } table StatSyncRes { is_file: bool; is_symlink: bool; len: ulong; modified:ulong; accessed:ulong; created:ulong; } table WriteFileSync { filename: string; data: [ubyte]; perm: uint; // perm specified by https://godoc.org/os#FileMode } root_type Base;