diff --git a/demo/fsa/main.ts b/demo/fsa/main.ts index 5a47f737b..ee2a7d9f9 100644 --- a/demo/fsa/main.ts +++ b/demo/fsa/main.ts @@ -41,6 +41,10 @@ const demo = async (dir: fsa.IFileSystemDirectoryHandle) => { console.log('copyFileSync() - can copy a file'); fs.copyFileSync('/cool.txt', '/cool (Copy).txt'); strictEqual(fs.readFileSync('/cool (Copy).txt', 'utf8'), 'worlds!'); + + console.log('renameSync() - can move a file'); + fs.renameSync('/cool (Copy).txt', '/dir/very-cool.txt'); + strictEqual(fs.readFileSync('/dir/very-cool.txt', 'utf8'), 'worlds!'); }; const main = async () => { diff --git a/src/fsa-to-node/FsaNodeFs.ts b/src/fsa-to-node/FsaNodeFs.ts index 7964d9371..949a1820c 100644 --- a/src/fsa-to-node/FsaNodeFs.ts +++ b/src/fsa-to-node/FsaNodeFs.ts @@ -850,6 +850,13 @@ export class FsaNodeFs extends FsaNodeCore implements FsCallbackApi, FsSynchrono adapter.call('copy', {src: srcFilename, dst: destFilename, flags}); }; + public readonly renameSync: FsSynchronousApi['renameSync'] = (oldPath: misc.PathLike, newPath: misc.PathLike): void => { + const srcFilename = pathToFilename(oldPath); + const destFilename = pathToFilename(newPath); + const adapter = this.getSyncAdapter(); + adapter.call('move', {src: srcFilename, dst: destFilename}); + }; + public readonly ftruncateSync: FsSynchronousApi['ftruncateSync'] = notSupported; public readonly linkSync: FsSynchronousApi['linkSync'] = notSupported; public readonly mkdirSync: FsSynchronousApi['mkdirSync'] = notSupported; @@ -860,7 +867,6 @@ export class FsaNodeFs extends FsaNodeCore implements FsCallbackApi, FsSynchrono public readonly readlinkSync: FsSynchronousApi['readlinkSync'] = notSupported; public readonly readSync: FsSynchronousApi['readSync'] = notSupported; public readonly realpathSync: FsSynchronousApi['realpathSync'] = notSupported; - public readonly renameSync: FsSynchronousApi['renameSync'] = notSupported; public readonly rmdirSync: FsSynchronousApi['rmdirSync'] = notSupported; public readonly rmSync: FsSynchronousApi['rmSync'] = notSupported; public readonly symlinkSync: FsSynchronousApi['symlinkSync'] = notSupported; diff --git a/src/fsa-to-node/types.ts b/src/fsa-to-node/types.ts index 1c906ac29..e2668077a 100644 --- a/src/fsa-to-node/types.ts +++ b/src/fsa-to-node/types.ts @@ -12,6 +12,7 @@ export interface FsaNodeSyncAdapterApi { writeFile(req: { filename: string; data: Uint8Array; opts?: opts.IWriteFileOptions }): void; appendFile(req: { filename: string; data: Uint8Array; opts?: opts.IAppendFileOptions }): void; copy(req: { src: string; dst: string, flags?: number }): void; + move(req: { src: string; dst: string }): void; } export interface FsaNodeSyncAdapter { diff --git a/src/fsa-to-node/worker/FsaNodeSyncWorker.ts b/src/fsa-to-node/worker/FsaNodeSyncWorker.ts index abeb0930a..20c0fc890 100644 --- a/src/fsa-to-node/worker/FsaNodeSyncWorker.ts +++ b/src/fsa-to-node/worker/FsaNodeSyncWorker.ts @@ -138,5 +138,8 @@ export class FsaNodeSyncWorker { copy: async ({ src, dst, flags }): Promise => { await this.fs.promises.copyFile(src, dst, flags); }, + move: async ({ src, dst }): Promise => { + await this.fs.promises.rename(src, dst); + }, }; }