This repository has been archived on 2020-11-02. You can view files and clone it, but cannot push or open issues or pull requests.
TripSit_Suite/node_modules/fstream/README.md
2020-11-01 22:46:04 +00:00

2.3 KiB
Raw Blame History

Like FS streams, but with stat on them, and supporting directories and symbolic links, as well as normal files. Also, you can use this to set the stats on a file, even if you dont change its contents, or to create a symlink, etc.

So, for example, you can “write” a directory, and itll call mkdir. You can specify a uid and gid, and itll call chown. You can specify a mtime and atime, and itll call utimes. You can call it a symlink and provide a linkpath and itll call symlink.

Note that it wont automatically resolve symbolic links. So, if you call fstream.Reader('/some/symlink') then youll get an object that stats and then ends immediately (since it has no data). To follow symbolic links, do this: fstream.Reader({path:'/some/symlink', follow: true }).

There are various checks to make sure that the bytes emitted are the same as the intended size, if the size is set.

Examples

fstream
  .Writer({ path: "path/to/file"
          , mode: 0755
          , size: 6
          })
  .write("hello\n")
  .end()

This will create the directories if theyre missing, and then write hello\n into the file, chmod it to 0755, and assert that 6 bytes have been written when its done.

fstream
  .Writer({ path: "path/to/file"
          , mode: 0755
          , size: 6
          , flags: "a"
          })
  .write("hello\n")
  .end()

You can pass flags in, if you want to append to a file.

fstream
  .Writer({ path: "path/to/symlink"
          , linkpath: "./file"
          , SymbolicLink: true
          , mode: "0755" // octal strings supported
          })
  .end()

If isSymbolicLink is a function, itll be called, and if it returns true, then itll treat it as a symlink. If its not a function, then any truish value will make a symlink, or you can set type: 'SymbolicLink', which does the same thing.

Note that the linkpath is relative to the symbolic link location, not the parent dir or cwd.

fstream
  .Reader("path/to/dir")
  .pipe(fstream.Writer("path/to/other/dir"))

This will do like cp -Rp path/to/dir path/to/other/dir. If the other dir exists and isnt a directory, then itll emit an error. Itll also set the uid, gid, mode, etc. to be identical. In this way, its more like rsync -a than simply a copy.