purescript-node / purescript-node-fs

Node.js file I/O for purescript
MIT License
33 stars 34 forks source link

Impossible to overwrite files with `copyFile` #81

Open CharlesTaylor7 opened 1 year ago

CharlesTaylor7 commented 1 year ago

When I run Node.FS.Aff.copyFile, it fails when the file already exists. That's because of the definition of defaultCopyMode which uses the fs.constants.COPYFILE_EXCL flag.

There's two issues:

(1) The default is inconsistent with the underlying node API. fs.copyFile without a specified copy mode operates as if no flags were applied. It allows overwriting files on copy.

https://nodejs.org/api/fs.html#fscopyfilesrc-dest-mode-callback

Asynchronously copies src to dest. By default, dest is overwritten if it already exists.

(2) There's no way to use this library to get at the node default behavior.

The structure of the Node.FS.Constants api only allows appending flags not removing them. There's no export of a "noFlags :: CopyMode".

CharlesTaylor7 commented 1 year ago

I have two ideas in mind for how to resolve this:

(1) Redefine defaultCopyMode:

-- Constants.purs
foreign import defaultCopyMode :: CopyMode
// Constants.js
export defaultCopyMode = 0;

Pros: it matches the node default. Cons: it's a breaking change, requires a version bump and is surprising to people who relied on the old behavior.

(2) Simply define and export this definition, but don't change defaultCopyMode. And apply some doc comments that explain the difference between noFlagsCopyMode and defaultCopyMode

// Constants.js
export noFlagsCopyMode = 0;

Pros: It's safer to have people opt-in Cons: Not a 1:1 with the node docs.