diff options
Diffstat (limited to 'js/files.ts')
-rw-r--r-- | js/files.ts | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/js/files.ts b/js/files.ts index e2c7123e6..a77f788df 100644 --- a/js/files.ts +++ b/js/files.ts @@ -1,12 +1,12 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. -import { Reader, Writer, Closer, ReadResult } from "./io"; +import { Reader, Writer, Seeker, Closer, ReadResult, SeekMode } from "./io"; import * as dispatch from "./dispatch"; import * as msg from "gen/msg_generated"; import { assert } from "./util"; import * as flatbuffers from "./flatbuffers"; /** The Deno abstraction for reading and writing files. */ -export class File implements Reader, Writer, Closer { +export class File implements Reader, Writer, Seeker, Closer { constructor(readonly rid: number) {} write(p: Uint8Array): Promise<number> { @@ -17,6 +17,10 @@ export class File implements Reader, Writer, Closer { return read(this.rid, p); } + seek(offset: number, whence: SeekMode): Promise<void> { + return seek(this.rid, offset, whence); + } + close(): void { close(this.rid); } @@ -123,6 +127,23 @@ export async function write(rid: number, p: Uint8Array): Promise<number> { return res.nbyte(); } +/** Seek a file ID to the given offset under mode given by `whence`. + * + */ +export async function seek( + rid: number, + offset: number, + whence: SeekMode +): Promise<void> { + const builder = flatbuffers.createBuilder(); + msg.Seek.startSeek(builder); + msg.Seek.addRid(builder, rid); + msg.Seek.addOffset(builder, offset); + msg.Seek.addWhence(builder, whence); + const inner = msg.Seek.endSeek(builder); + await dispatch.sendAsync(builder, msg.Any.Seek, inner); +} + /** Close the file ID. */ export function close(rid: number): void { const builder = flatbuffers.createBuilder(); |