poe-code 14.0.95 → 14.0.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/metafile.json +1 -1
  2. package/package.json +1 -1
  3. package/packages/safe-bash/dist/commands/filesystem-requirements.d.ts.map +1 -1
  4. package/packages/safe-bash/dist/commands/filesystem-requirements.js +1 -0
  5. package/packages/safe-bash/dist/commands/filesystem-requirements.js.map +1 -1
  6. package/packages/safe-bash/dist/commands/filesystem.d.ts.map +1 -1
  7. package/packages/safe-bash/dist/commands/filesystem.js +29 -1
  8. package/packages/safe-bash/dist/commands/filesystem.js.map +1 -1
  9. package/packages/safe-bash/dist/contracts/filesystem.d.ts +1 -1
  10. package/packages/safe-bash/dist/contracts/filesystem.d.ts.map +1 -1
  11. package/packages/safe-bash/dist/core.browser.js +34 -2
  12. package/packages/safe-bash/dist/core.browser.js.map +2 -2
  13. package/packages/safe-fs/dist/contracts/filesystem.d.ts +5 -1
  14. package/packages/safe-fs/dist/fs/devices/index.d.ts +2 -2
  15. package/packages/safe-fs/dist/fs/memory/index.d.ts +3 -2
  16. package/packages/safe-fs/dist/fs/mount/index.d.ts +2 -2
  17. package/packages/safe-fs/dist/fs/overlay/index.d.ts +2 -2
  18. package/packages/safe-fs/dist/fs/readonly/index.d.ts +2 -2
  19. package/packages/safe-fs/dist/fs/real/index.d.ts +2 -2
  20. package/packages/safe-fs/dist/fs/s3/filesystem.d.ts +3 -2
  21. package/packages/safe-fs/dist/fs/webdav/webdav.d.ts +3 -2
  22. package/packages/safe-js/dist/browser/chunks/{chunk-YJ7IIV57.js → chunk-QK4IEGRO.js} +44 -2
  23. package/packages/safe-js/dist/browser/chunks/chunk-QK4IEGRO.js.map +7 -0
  24. package/packages/safe-js/dist/browser/safe-fs-core.js +1 -1
  25. package/packages/safe-js/dist/browser/safe-fs.js +1 -1
  26. package/packages/safe-js/dist/chunks/{chunk-3HQSRMV6.js → chunk-6V4U2JZS.js} +44 -2
  27. package/packages/safe-js/dist/chunks/chunk-6V4U2JZS.js.map +7 -0
  28. package/packages/safe-js/dist/chunks/{chunk-NZIVWYYY.js → chunk-EZRL4ES2.js} +3 -3
  29. package/packages/safe-js/dist/chunks/{chunk-5JIIALYB.js → chunk-XOQ5CVQM.js} +9 -2
  30. package/packages/safe-js/dist/chunks/chunk-XOQ5CVQM.js.map +7 -0
  31. package/packages/safe-js/dist/cli.js +3 -3
  32. package/packages/safe-js/dist/index.js +3 -3
  33. package/packages/safe-js/dist/safe-fs-core.js +1 -1
  34. package/packages/safe-js/dist/safe-fs-node.js +2 -2
  35. package/packages/safe-js/dist/safe-fs.js +2 -2
  36. package/packages/safe-js/dist/browser/chunks/chunk-YJ7IIV57.js.map +0 -7
  37. package/packages/safe-js/dist/chunks/chunk-3HQSRMV6.js.map +0 -7
  38. package/packages/safe-js/dist/chunks/chunk-5JIIALYB.js.map +0 -7
  39. /package/packages/safe-js/dist/chunks/{chunk-NZIVWYYY.js.map → chunk-EZRL4ES2.js.map} +0 -0
@@ -50,6 +50,7 @@ export interface FileSystemCapabilities {
50
50
  readonly permissions?: boolean;
51
51
  readonly timestamps?: boolean;
52
52
  readonly atomicRename?: boolean;
53
+ readonly atomicRenameNoReplace?: boolean;
53
54
  readonly snapshotRmdir?: boolean;
54
55
  readonly streamingRead?: boolean;
55
56
  readonly retainedRead?: boolean;
@@ -65,6 +66,9 @@ export interface FileReadHandle {
65
66
  read(position: number, maxBytes: number, options?: FsOptions): Promise<Uint8Array>;
66
67
  close(): Promise<void>;
67
68
  }
69
+ export interface RenameOptions extends FsOptions {
70
+ readonly noReplace?: boolean;
71
+ }
68
72
  export interface ReadFileOptions extends FsOptions {
69
73
  readonly maxBytes?: number;
70
74
  }
@@ -116,7 +120,7 @@ export interface FileSystem {
116
120
  mkdir(path: string, options?: MkdirOptions): Promise<void>;
117
121
  rm(path: string, options?: RemoveOptions): Promise<void>;
118
122
  rmdir?(path: string, options?: FsOptions): Promise<void>;
119
- rename(source: string, destination: string, options?: FsOptions): Promise<void>;
123
+ rename(source: string, destination: string, options?: RenameOptions): Promise<void>;
120
124
  copyFile(source: string, destination: string, options?: CopyFileOptions): Promise<void>;
121
125
  realpath(path: string, options?: FsOptions): Promise<string>;
122
126
  access(path: string, mode?: number, options?: FsOptions): Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, FileReadHandle, FileStat, FileSystem, FileSystemCapabilities, FsOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
1
+ import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, FileReadHandle, FileStat, FileSystem, FileSystemCapabilities, FsOptions, RenameOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
2
2
  import type { ByteSource } from "../../contracts/io.js";
3
3
  export declare class DeviceFileSystem implements FileSystem {
4
4
  #private;
@@ -20,7 +20,7 @@ export declare class DeviceFileSystem implements FileSystem {
20
20
  mkdir(path: string, options?: MkdirOptions): Promise<void>;
21
21
  rm(path: string, options?: RemoveOptions): Promise<void>;
22
22
  rmdir(path: string, options?: FsOptions): Promise<void>;
23
- rename(source: string, destination: string, options?: FsOptions): Promise<void>;
23
+ rename(source: string, destination: string, options?: RenameOptions): Promise<void>;
24
24
  copyFile(source: string, destination: string, options?: CopyFileOptions): Promise<void>;
25
25
  access(path: string, mode?: number, options?: FsOptions): Promise<void>;
26
26
  readlink(path: string, options?: FsOptions): Promise<string>;
@@ -1,4 +1,4 @@
1
- import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, EntryComparison, FileReadHandle, FileStat, FileSystem, FsOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
1
+ import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, EntryComparison, FileReadHandle, FileStat, FileSystem, FsOptions, RenameOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
2
2
  import type { ByteSource } from "../../contracts/io.js";
3
3
  import { type MemoryFileSystemOptions } from "./limits.js";
4
4
  export { defaultMemoryFileSystemLimits, type MemoryFileSystemLimits, type MemoryFileSystemOptions } from "./limits.js";
@@ -20,6 +20,7 @@ export declare class MemoryFileSystem implements FileSystem {
20
20
  removeDirectory: true;
21
21
  recursiveRemove: true;
22
22
  rename: true;
23
+ atomicRenameNoReplace: true;
23
24
  copy: true;
24
25
  exclusiveCopy: true;
25
26
  readlink: true;
@@ -76,7 +77,7 @@ export declare class MemoryFileSystem implements FileSystem {
76
77
  mkdir(path: string, options?: MkdirOptions): Promise<void>;
77
78
  rmdir(path: string, options?: FsOptions): Promise<void>;
78
79
  rm(path: string, options?: RemoveOptions): Promise<void>;
79
- rename(source: string, destination: string, options?: FsOptions): Promise<void>;
80
+ rename(source: string, destination: string, options?: RenameOptions): Promise<void>;
80
81
  copyFile(source: string, destination: string, options?: CopyFileOptions): Promise<void>;
81
82
  realpath(path: string, options?: FsOptions): Promise<string>;
82
83
  access(path: string, mode?: number, options?: FsOptions): Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, FileReadHandle, FileStat, FileSystem, FileSystemCapabilities, FsOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
1
+ import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, FileReadHandle, FileStat, FileSystem, FileSystemCapabilities, FsOptions, RenameOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
2
2
  import type { ByteSource } from "../../contracts/io.js";
3
3
  export interface MountFileSystemOptions {
4
4
  readonly root: FileSystem;
@@ -29,7 +29,7 @@ export declare class MountFileSystem implements FileSystem {
29
29
  mkdir(path: string, options?: MkdirOptions): Promise<void>;
30
30
  rmdir(path: string, options?: FsOptions): Promise<void>;
31
31
  rm(path: string, options?: RemoveOptions): Promise<void>;
32
- rename(source: string, destination: string, options?: FsOptions): Promise<void>;
32
+ rename(source: string, destination: string, options?: RenameOptions): Promise<void>;
33
33
  copyFile(source: string, destination: string, options?: CopyFileOptions): Promise<void>;
34
34
  realpath(path: string, options?: FsOptions): Promise<string>;
35
35
  compareEntry(path: string, peer: FileSystem, peerPath: string, options?: FsOptions): Promise<import("../../contracts/filesystem.js").EntryComparison>;
@@ -1,5 +1,5 @@
1
1
  import type { ByteSource } from "../../contracts/io.js";
2
- import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, FileStat, FileSystem, FileSystemCapabilities, FsOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
2
+ import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, FileStat, FileSystem, FileSystemCapabilities, FsOptions, RenameOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
3
3
  export interface OverlayFileSystemOptions {
4
4
  readonly upper: FileSystem;
5
5
  readonly lower: FileSystem;
@@ -58,7 +58,7 @@ export declare class OverlayFileSystem implements FileSystem {
58
58
  rmdir(path: string, options?: FsOptions): Promise<void>;
59
59
  rm(path: string, options?: RemoveOptions): Promise<void>;
60
60
  private materialize;
61
- rename(source: string, destination: string, options?: FsOptions): Promise<void>;
61
+ rename(source: string, destination: string, options?: RenameOptions): Promise<void>;
62
62
  copyFile(source: string, destination: string, options?: CopyFileOptions): Promise<void>;
63
63
  readlink(path: string, options?: FsOptions): Promise<string>;
64
64
  symlink(target: string, path: string, options?: FsOptions): Promise<void>;
@@ -1,5 +1,5 @@
1
1
  import type { ByteSource } from "../../contracts/io.js";
2
- import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, FileStat, FileSystem, FileSystemCapabilities, FsOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
2
+ import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, FileStat, FileSystem, FileSystemCapabilities, FsOptions, RenameOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
3
3
  export declare class ReadOnlyFileSystem implements FileSystem {
4
4
  #private;
5
5
  constructor(filesystem: FileSystem);
@@ -22,7 +22,7 @@ export declare class ReadOnlyFileSystem implements FileSystem {
22
22
  rm(path: string, _options?: RemoveOptions): Promise<void>;
23
23
  unlink(path: string, _options?: FsOptions): Promise<void>;
24
24
  rmdir(path: string, _options?: FsOptions): Promise<void>;
25
- rename(source: string, destination: string, _options?: FsOptions): Promise<void>;
25
+ rename(source: string, destination: string, _options?: RenameOptions): Promise<void>;
26
26
  copyFile(source: string, destination: string, _options?: CopyFileOptions): Promise<void>;
27
27
  symlink(target: string, path: string, _options?: FsOptions): Promise<void>;
28
28
  link(existingPath: string, newPath: string, _options?: FsOptions): Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { AppendFileOptions, ByteSource, CopyFileOptions, DirectoryEntry, FileReadHandle, FileStat, FileSystem, FileSystemCapabilities, FsOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/index.js";
1
+ import type { AppendFileOptions, ByteSource, CopyFileOptions, DirectoryEntry, FileReadHandle, FileStat, FileSystem, FileSystemCapabilities, FsOptions, RenameOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/index.js";
2
2
  export interface RealFileSystemOptions {
3
3
  /** An existing, absolute host directory. It is never created implicitly. */
4
4
  readonly root: string;
@@ -59,7 +59,7 @@ export declare class RealFileSystem implements FileSystem {
59
59
  mkdir(path: string, options?: MkdirOptions): Promise<void>;
60
60
  rmdir(path: string, options?: FsOptions): Promise<void>;
61
61
  rm(path: string, options?: RemoveOptions): Promise<void>;
62
- rename(source: string, destination: string, options?: FsOptions): Promise<void>;
62
+ rename(source: string, destination: string, options?: RenameOptions): Promise<void>;
63
63
  copyFile(source: string, destination: string, options?: CopyFileOptions): Promise<void>;
64
64
  realpath(path: string, options?: FsOptions): Promise<string>;
65
65
  access(path: string, mode?: number, options?: FsOptions): Promise<void>;
@@ -1,5 +1,5 @@
1
1
  import { FsError } from "../../contracts/errors.js";
2
- import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, EntryComparison, FileStat, FileSystem, FsOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
2
+ import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, EntryComparison, FileStat, FileSystem, FsOptions, RenameOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
3
3
  import type { ByteSource } from "../../contracts/io.js";
4
4
  import type { S3Transport } from "./transport.js";
5
5
  export interface S3FileSystemOptions {
@@ -41,6 +41,7 @@ export declare class S3FileSystem implements FileSystem {
41
41
  append: boolean;
42
42
  exclusiveCreate: boolean;
43
43
  truncate: boolean;
44
+ atomicRenameNoReplace: false;
44
45
  rename: boolean;
45
46
  streamingAppend: boolean;
46
47
  randomAccessWrite: false;
@@ -99,7 +100,7 @@ export declare class S3FileSystem implements FileSystem {
99
100
  rm(input: string, options?: RemoveOptions): Promise<void>;
100
101
  private copy;
101
102
  copyFile(sourceInput: string, destinationInput: string, options?: CopyFileOptions): Promise<void>;
102
- rename(sourceInput: string, destinationInput: string, options?: FsOptions): Promise<void>;
103
+ rename(sourceInput: string, destinationInput: string, options?: RenameOptions): Promise<void>;
103
104
  private copyWithPut;
104
105
  realpath(input: string, options?: FsOptions): Promise<string>;
105
106
  access(path: string, mode?: number, options?: FsOptions): Promise<void>;
@@ -1,6 +1,6 @@
1
1
  import type { PlatformComparisonCallback } from "#safe-fs-platform";
2
2
  import type { ByteSource } from "../../contracts/io.js";
3
- import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, EntryComparison, FileStat, FileSystem, FsOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
3
+ import type { AppendFileOptions, CopyFileOptions, DirectoryEntry, EntryComparison, FileStat, FileSystem, FsOptions, RenameOptions, MkdirOptions, ReadDirectoryOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions } from "../../contracts/filesystem.js";
4
4
  export type WebDavFetch = (url: string, init: RequestInit) => Promise<Response>;
5
5
  export interface WebDavAtomicEmptyDirectoryRequest {
6
6
  readonly operation: "atomic-empty-rmdir/v1";
@@ -49,6 +49,7 @@ export declare class WebDavFileSystem implements FileSystem {
49
49
  remove: true;
50
50
  recursiveRemove: true;
51
51
  rename: true;
52
+ atomicRenameNoReplace: false;
52
53
  copy: true;
53
54
  exclusiveCopy: true;
54
55
  readlink: false;
@@ -114,7 +115,7 @@ export declare class WebDavFileSystem implements FileSystem {
114
115
  private guardTransferIdentity;
115
116
  private transfer;
116
117
  private withDestinationLock;
117
- rename(source: string, destination: string, options?: FsOptions): Promise<void>;
118
+ rename(source: string, destination: string, options?: RenameOptions): Promise<void>;
118
119
  copyFile(source: string, destination: string, options?: CopyFileOptions): Promise<void>;
119
120
  realpath(path: string, options?: FsOptions): Promise<string>;
120
121
  access(path: string, mode?: number, options?: FsOptions): Promise<void>;
@@ -775,6 +775,7 @@ var MemoryFileSystem = class _MemoryFileSystem {
775
775
  removeDirectory: true,
776
776
  recursiveRemove: true,
777
777
  rename: true,
778
+ atomicRenameNoReplace: true,
778
779
  copy: true,
779
780
  exclusiveCopy: true,
780
781
  readlink: true,
@@ -1199,6 +1200,7 @@ var MemoryFileSystem = class _MemoryFileSystem {
1199
1200
  if (this.terminalDot(source) || this.terminalDot(destination)) this.fail("EINVAL", "rename", source, destination);
1200
1201
  if (node === this.root || target.node === this.root) this.fail("EBUSY", "rename", source, destination);
1201
1202
  if (destination.endsWith("/") && node.type !== "directory") this.fail("ENOTDIR", "rename", source, destination);
1203
+ if (options.noReplace && target.node) this.fail("EEXIST", "rename", source, destination);
1202
1204
  if (target.node === node) return;
1203
1205
  if (node.type === "directory" && target.path.startsWith(`${origin.path}/`)) this.fail("EINVAL", "rename", source, destination);
1204
1206
  this.permission(origin.parent, 3, "rename", source);
@@ -1701,6 +1703,7 @@ var deviceCapabilities = Object.freeze({
1701
1703
  truncate: false,
1702
1704
  randomAccessWrite: false,
1703
1705
  atomicRename: false,
1706
+ atomicRenameNoReplace: false,
1704
1707
  descriptorWriteStream: true
1705
1708
  });
1706
1709
  function globalCapabilities(filesystem) {
@@ -1975,6 +1978,11 @@ var DeviceFileSystem = class {
1975
1978
  async rename(source, destination, options = {}) {
1976
1979
  await this.#mutable(source, options, false);
1977
1980
  await this.#mutable(destination, options, false);
1981
+ if (options.noReplace) {
1982
+ const capabilities = await this.#filesystem.capabilitiesFor?.(destination, options) ?? this.#filesystem.capabilities;
1983
+ options.signal?.throwIfAborted();
1984
+ if (capabilities.atomicRenameNoReplace !== true) throw new FsError("ENOTSUP", { syscall: "rename", path: source, dest: destination });
1985
+ }
1978
1986
  await this.#filesystem.rename(source, destination, options);
1979
1987
  }
1980
1988
  async copyFile(source, destination, options = {}) {
@@ -2111,6 +2119,7 @@ function readOnlyCapabilities(capabilities) {
2111
2119
  timestamps: false,
2112
2120
  descriptorWriteStream: false,
2113
2121
  atomicRename: false,
2122
+ atomicRenameNoReplace: false,
2114
2123
  streamingWrite: false
2115
2124
  });
2116
2125
  }
@@ -2366,7 +2375,7 @@ var MountFileSystem = class _MountFileSystem {
2366
2375
  if (capability === "descriptorWriteStream" && backend.capabilities.streamingWrite === false) return false;
2367
2376
  return declared === true && optional[capability]?.some((method) => typeof backend[method] !== "function") ? false : declared;
2368
2377
  });
2369
- if (["rename", "copy", "exclusiveCopy"].includes(capability) && mounts.length > 1) return void 0;
2378
+ if (["rename", "atomicRenameNoReplace", "copy", "exclusiveCopy"].includes(capability) && mounts.length > 1) return void 0;
2370
2379
  return values.every((value) => value === true) ? true : values.every((value) => value === false) ? false : void 0;
2371
2380
  };
2372
2381
  const semantics = Object.fromEntries([
@@ -2386,6 +2395,7 @@ var MountFileSystem = class _MountFileSystem {
2386
2395
  "removeDirectory",
2387
2396
  "recursiveRemove",
2388
2397
  "rename",
2398
+ "atomicRenameNoReplace",
2389
2399
  "copy",
2390
2400
  "exclusiveCopy",
2391
2401
  "readlink",
@@ -2699,6 +2709,11 @@ var MountFileSystem = class _MountFileSystem {
2699
2709
  this.mutable(target);
2700
2710
  this.entryPath(source);
2701
2711
  this.entryPath(destination);
2712
+ if (options.noReplace) {
2713
+ const capabilities = await target.mount.backend.capabilitiesFor?.(target.local, options) ?? target.mount.backend.capabilities;
2714
+ options.signal?.throwIfAborted();
2715
+ if (capabilities.atomicRenameNoReplace !== true) fail("ENOTSUP");
2716
+ }
2702
2717
  await origin.mount.backend.rename(origin.local, target.local, options);
2703
2718
  }, destination);
2704
2719
  }
@@ -2962,6 +2977,7 @@ var OverlayFileSystem = class {
2962
2977
  ...upper.readOnly === void 0 ? {} : { readOnly: upper.readOnly },
2963
2978
  ...effectiveAppend === void 0 ? {} : { append: effectiveAppend },
2964
2979
  atomicRename: false,
2980
+ atomicRenameNoReplace: false,
2965
2981
  descriptorWriteStream: false,
2966
2982
  hardlinks: false,
2967
2983
  symlinks: writable && this.#upper.capabilities.symlinks === true && typeof this.#upper.symlink === "function" && typeof this.#upper.readlink === "function" && (this.#lower.capabilities.symlinks !== true || typeof this.#lower.readlink === "function"),
@@ -3468,6 +3484,7 @@ var OverlayFileSystem = class {
3468
3484
  }
3469
3485
  async rename(source, destination, options = {}) {
3470
3486
  return this.run(options, async () => {
3487
+ if (options.noReplace) fail2("ENOTSUP", source, "atomic no-replace rename is unsupported");
3471
3488
  this.writable(source);
3472
3489
  const original = await this.required(source, options, false);
3473
3490
  const target = await this.resolve(destination, options, false, true);
@@ -3795,6 +3812,15 @@ function withFileSystemQuota(fs, options) {
3795
3812
  await fs.appendFile(path, data, appendOptions);
3796
3813
  });
3797
3814
  },
3815
+ async rename(source, destination, renameOptions) {
3816
+ if (renameOptions?.noReplace) {
3817
+ renameOptions.signal?.throwIfAborted();
3818
+ const capabilities = await fs.capabilitiesFor?.(destination, renameOptions) ?? fs.capabilities;
3819
+ renameOptions?.signal?.throwIfAborted();
3820
+ if (capabilities.atomicRenameNoReplace !== true) throw new FsError("ENOTSUP", { syscall: "rename", path: source, dest: destination });
3821
+ }
3822
+ await fs.rename(source, destination, renameOptions);
3823
+ },
3798
3824
  copyFile(source, destination, copyOptions) {
3799
3825
  return mutate(async () => {
3800
3826
  await assertDelta(destination, (await fs.stat(source, copyOptions)).size, copyOptions);
@@ -3950,6 +3976,17 @@ function scopeFileSystem(filesystem, charge, signal) {
3950
3976
  const peer = args[1];
3951
3977
  args[1] = originals.get(peer) ?? peer;
3952
3978
  }
3979
+ if (property === "rename" && args[2]?.noReplace) return (async () => {
3980
+ const options = args[2];
3981
+ const capabilities = await original.capabilitiesFor?.(args[1], options) ?? original.capabilities;
3982
+ assertOpen(options);
3983
+ if (capabilities.atomicRenameNoReplace !== true) throw new FsError("ENOTSUP", {
3984
+ syscall: "rename",
3985
+ path: args[0],
3986
+ dest: args[1]
3987
+ });
3988
+ return Reflect.apply(method, original, args);
3989
+ })();
3953
3990
  return Reflect.apply(method, original, args);
3954
3991
  };
3955
3992
  const scoped = property === "openReadFile" ? async (...args) => wrapHandle(await dispatch(...args)) : property === "readStream" ? (...args) => wrapStream(dispatch(...args), args[1]) : operations.has(property) && property !== "canonicalizeMissingTarget" ? async (...args) => dispatch(...args) : dispatch;
@@ -4334,6 +4371,7 @@ var WebDavFileSystem = class {
4334
4371
  remove: true,
4335
4372
  recursiveRemove: true,
4336
4373
  rename: true,
4374
+ atomicRenameNoReplace: false,
4337
4375
  copy: true,
4338
4376
  exclusiveCopy: true,
4339
4377
  readlink: false,
@@ -5272,6 +5310,10 @@ var WebDavFileSystem = class {
5272
5310
  }
5273
5311
  }
5274
5312
  async rename(source, destination, options = {}) {
5313
+ if (options.noReplace) {
5314
+ options.signal?.throwIfAborted();
5315
+ fail3("ENOTSUP", "rename", source, "atomic no-replace rename is unsupported");
5316
+ }
5275
5317
  await this.transfer("MOVE", source, destination, options);
5276
5318
  }
5277
5319
  async copyFile(source, destination, options = {}) {
@@ -5998,4 +6040,4 @@ export {
5998
6040
  WebDavFileSystem,
5999
6041
  createFsBridge
6000
6042
  };
6001
- //# sourceMappingURL=chunk-YJ7IIV57.js.map
6043
+ //# sourceMappingURL=chunk-QK4IEGRO.js.map