From 7bb53a5e0cec5a14d4559e30ff8f3e072d7d9903 Mon Sep 17 00:00:00 2001 From: Abdullah Atta Date: Sat, 3 Aug 2024 11:18:55 +0500 Subject: [PATCH] fs: add support for moving files --- packages/streamable-fs/index.ts | 12 ++++++++++-- packages/streamable-fs/src/interfaces.ts | 9 ++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/streamable-fs/index.ts b/packages/streamable-fs/index.ts index 1ad865411..100e51535 100644 --- a/packages/streamable-fs/index.ts +++ b/packages/streamable-fs/index.ts @@ -31,9 +31,12 @@ export class StreamableFS implements IStreamableFS { async createFile( filename: string, size: number, - type: string + type: string, + options?: { overwrite?: boolean } ): Promise { - if (await this.exists(filename)) throw new Error("File already exists."); + const exists = await this.exists(filename); + if (!options?.overwrite && exists) throw new Error("File already exists."); + else if (options?.overwrite && exists) await this.deleteFile(filename); const file: File = { filename, @@ -69,6 +72,11 @@ export class StreamableFS implements IStreamableFS { return true; } + async moveFile(source: FileHandle, dest: FileHandle) { + await source.readable.pipeTo(dest.writeable); + await source.delete(); + } + async clear(): Promise { await this.storage.clear(); } diff --git a/packages/streamable-fs/src/interfaces.ts b/packages/streamable-fs/src/interfaces.ts index ef44b1de7..7869546f1 100644 --- a/packages/streamable-fs/src/interfaces.ts +++ b/packages/streamable-fs/src/interfaces.ts @@ -21,10 +21,17 @@ import FileHandle from "./filehandle"; import { File } from "./types"; export interface IStreamableFS { - createFile(filename: string, size: number, type: string): Promise; + createFile( + filename: string, + size: number, + type: string, + options?: { overwrite?: boolean } + ): Promise; readFile(filename: string): Promise; exists(filename: string): Promise; deleteFile(filename: string): Promise; + list(): Promise; + moveFile(source: FileHandle, dest: FileHandle): Promise; clear(): Promise; }