summaryrefslogtreecommitdiff
path: root/js/files.ts
diff options
context:
space:
mode:
Diffstat (limited to 'js/files.ts')
-rw-r--r--js/files.ts25
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();