424 lines
13 KiB
Haxe
424 lines
13 KiB
Haxe
package eval.luv;
|
|
|
|
import eval.integers.Int64;
|
|
import eval.integers.UInt64;
|
|
|
|
@:forward
|
|
abstract FileRequest(Request) to Request {}
|
|
|
|
enum abstract FileOpenFlag(Int) {
|
|
var RDONLY = 0;
|
|
var WRONLY = 1;
|
|
var RDWR = 2;
|
|
var CREAT = 3;
|
|
var EXCL = 4;
|
|
var EXLOCK = 5;
|
|
var NOCTTY = 6;
|
|
var NOFOLLOW = 7;
|
|
var TEMPORARY = 8;
|
|
var TRUNC = 9;
|
|
var APPEND = 10;
|
|
var DIRECT = 11;
|
|
var DSYNC = 12;
|
|
var FILEMAP = 13;
|
|
var NOATIME = 14;
|
|
var NONBLOCK = 15;
|
|
var RANDOM = 16;
|
|
var SEQUENTIAL = 17;
|
|
var SHORT_LIVED = 18;
|
|
var SYMLINK = 19;
|
|
var SYNC = 20;
|
|
}
|
|
|
|
/**
|
|
Permission bits.
|
|
@see https://aantron.github.io/luv/luv/Luv/File/Mode
|
|
**/
|
|
enum FileMode {
|
|
IRWXU;
|
|
IRUSR;
|
|
IWUSR;
|
|
IXUSR;
|
|
IRWXG;
|
|
IRGRP;
|
|
IWGRP;
|
|
IXGRP;
|
|
IRWXO;
|
|
IROTH;
|
|
IWOTH;
|
|
IXOTH;
|
|
ISUID;
|
|
ISGID;
|
|
ISVTX;
|
|
IFMT;
|
|
IFREG;
|
|
IFDIR;
|
|
IFBLK;
|
|
IFCHR;
|
|
IFLNK;
|
|
IFIFO;
|
|
NUMERIC(mode:Int);
|
|
}
|
|
|
|
/**
|
|
Abstract type for a bit field of permissions bits, i.e., an `int` in which
|
|
multiple bits may be set. These bit fields are returned by operations such
|
|
as `eval.luv.File.stat`
|
|
**/
|
|
@:coreType abstract FileModeNumeric {}
|
|
|
|
typedef FileStatTimeSpec = {
|
|
var sec:Int64;
|
|
var nsec:Int64;
|
|
}
|
|
|
|
typedef FileStat = {
|
|
var dev:UInt64;
|
|
var mode:FileModeNumeric;
|
|
var nlink:UInt64;
|
|
var uid:UInt64;
|
|
var gid:UInt64;
|
|
var rdev:UInt64;
|
|
var ino:UInt64;
|
|
var size:UInt64;
|
|
var blksize:UInt64;
|
|
var blocks:UInt64;
|
|
var flags:UInt64;
|
|
var gen:UInt64;
|
|
var atim:FileStatTimeSpec;
|
|
var mtim:FileStatTimeSpec;
|
|
var ctim:FileStatTimeSpec;
|
|
var birthtim:FileStatTimeSpec;
|
|
}
|
|
|
|
typedef FileStatFs = {
|
|
var type:UInt64;
|
|
var bsize:UInt64;
|
|
var blocks:UInt64;
|
|
var bfree:UInt64;
|
|
var bavail:UInt64;
|
|
var files:UInt64;
|
|
var ffree:UInt64;
|
|
var fspare:Array<UInt64>;
|
|
}
|
|
|
|
enum abstract FileCopyFlag(Int) {
|
|
var COPYFILE_EXCL = 0;
|
|
var COPYFILE_FICLONE = 1;
|
|
var COPYFILE_FICLONE_FORCE = 2;
|
|
}
|
|
|
|
enum abstract FileAccessFlag(Int) {
|
|
var F_OK = 0;
|
|
var R_OK = 1;
|
|
var W_OK = 2;
|
|
var X_OK = 3;
|
|
}
|
|
|
|
enum abstract FileSymlinkFlag(Int) {
|
|
var SYMLINK_DIR = 0;
|
|
var SYMLINK_JUNCTION = 1;
|
|
}
|
|
|
|
/**
|
|
Files.
|
|
|
|
@see https://aantron.github.io/luv/luv/Luv/File
|
|
**/
|
|
@:using(eval.luv.Handle)
|
|
@:coreType abstract File to Handle {
|
|
|
|
extern static public final stdin:File;
|
|
extern static public final stdout:File;
|
|
extern static public final stderr:File;
|
|
|
|
static public function createRequest():FileRequest;
|
|
|
|
/**
|
|
Checks whether all the bits in `mask` are set in `bits`.
|
|
|
|
For example, if `bits` is equal to octal 0o644, then
|
|
`eval.luv.File.testMode [IRUSR] bits` evaluates to `true`.
|
|
**/
|
|
static public function testMode(mask:Array<FileMode>, bits:FileModeNumeric):Bool;
|
|
|
|
/**
|
|
Opens the file at the given path.
|
|
The default value of the `mode` argument is equal to octal `0o644`.
|
|
**/
|
|
static public function open(loop:Loop, path:NativeString, flags:Array<FileOpenFlag>, ?mode:Array<FileMode>, ?request:FileRequest, callback:(result:Result<File>)->Void):Void;
|
|
|
|
/**
|
|
Closes the file.
|
|
**/
|
|
public function close(loop:Loop, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Reads from the file.
|
|
|
|
The incoming data is written consecutively to into the given buffers.
|
|
The number of bytes that the operation tries to read is the total length
|
|
of the buffers.
|
|
|
|
End of file is indicated by `Result.Ok(0)`. Note that this is different
|
|
from `eval.luv.Stream.readStart`.
|
|
**/
|
|
public function read(loop:Loop, fileOffset:Int64, buffers:Array<Buffer>, ?request:FileRequest, callback:(result:Result<UInt64>)->Void):Void;
|
|
|
|
/**
|
|
Writes to the file.
|
|
**/
|
|
public function write(loop:Loop, fileOffset:Int64, buffers:Array<Buffer>, ?request:FileRequest, callback:(result:Result<UInt64>)->Void):Void;
|
|
|
|
/**
|
|
Deletes the file at the given path.
|
|
**/
|
|
static public function unlink(loop:Loop, path:NativeString, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Moves the file at the given path to the path given by `toPath`
|
|
**/
|
|
static public function rename(loop:Loop, path:NativeString, toPath:NativeString, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Creates a temporary file with name based on the given pattern.
|
|
**/
|
|
static public function mkstemp(loop:Loop, pattern:NativeString, ?request:FileRequest, callback:(result:Result<{name:NativeString,file:File}>)->Void):Void;
|
|
|
|
/**
|
|
Creates a temporary directory with name based on the given pattern.
|
|
**/
|
|
static public function mkdtemp(loop:Loop, pattern:NativeString, ?request:FileRequest, callback:(result:Result<NativeString>)->Void):Void;
|
|
|
|
/**
|
|
Creates a directory.
|
|
**/
|
|
static public function mkdir(loop:Loop, path:NativeString, ?mode:Array<FileMode>, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Deletes a directory.
|
|
**/
|
|
static public function rmdir(loop:Loop, path:NativeString, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Retrieves status information for the file at the given path.
|
|
**/
|
|
static public function stat(loop:Loop, path:NativeString, ?request:FileRequest, callback:(result:Result<FileStat>)->Void):Void;
|
|
|
|
/**
|
|
Like `eval.luv.File.stat`, but does not dereference symlinks.
|
|
**/
|
|
static public function lstat(loop:Loop, path:NativeString, ?request:FileRequest, callback:(result:Result<FileStat>)->Void):Void;
|
|
|
|
/**
|
|
Retrieves status information for this file.
|
|
**/
|
|
public function fstat(loop:Loop, ?request:FileRequest, callback:(result:Result<FileStat>)->Void):Void;
|
|
|
|
/**
|
|
Retrieves status information for the filesystem containing the given path.
|
|
**/
|
|
static public function statFs(loop:Loop, path:NativeString, ?request:FileRequest, callback:(result:Result<FileStatFs>)->Void):Void;
|
|
|
|
/**
|
|
Flushes file changes to storage.
|
|
**/
|
|
public function fsync(loop:Loop, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Like `eval.luv.File.fsync`, but may omit some metadata.
|
|
**/
|
|
public function fdataSync(loop:Loop, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Truncates the given file to the given length.
|
|
**/
|
|
public function ftruncate(loop:Loop, length:Int64, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Copies the file at the given path to the path given by `toPath`.
|
|
**/
|
|
static public function copyFile(loop:Loop, path:NativeString, toPath:NativeString, ?flags:Array<FileCopyFlag>, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Transfers data between file descriptors.
|
|
**/
|
|
public function sendFile(loop:Loop, toFile:File, offset:Int64, length:UInt64, ?request:FileRequest, callback:(result:Result<UInt64>)->Void):Void;
|
|
|
|
/**
|
|
Checks whether the calling process can access the file at the given path.
|
|
**/
|
|
static public function access(loop:Loop, path:NativeString, flags:Array<FileAccessFlag>, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Changes permissions of the file at the given path.
|
|
**/
|
|
static public function chmod(loop:Loop, path:NativeString, mode:Array<FileMode>, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Changes permissions of the file.
|
|
**/
|
|
public function fchmod(loop:Loop, mode:Array<FileMode>, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Sets timestamps of the file at the given path.
|
|
**/
|
|
static public function utime(loop:Loop, path:NativeString, atime:Float, mtime:Float, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Sets timestamps of the file.
|
|
**/
|
|
public function futime(loop:Loop, atime:Float, mtime:Float, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Sets timestamps of the file at the given path without dereferencing symlinks.
|
|
**/
|
|
static public function lutime(loop:Loop, path:NativeString, atime:Float, mtime:Float, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Hardlinks a file at the location given by `link`.
|
|
**/
|
|
static public function link(loop:Loop, path:NativeString, link:NativeString, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Symlinks a file at the location given by `link`.
|
|
**/
|
|
static public function symlink(loop:Loop, path:NativeString, link:NativeString, ?flags:Array<FileSymlinkFlag>, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Reads the target path of a symlink.
|
|
**/
|
|
static public function readLink(loop:Loop, path:NativeString, ?request:FileRequest, callback:(result:Result<NativeString>)->Void):Void;
|
|
|
|
/**
|
|
Resolves a real absolute path to the given file.
|
|
**/
|
|
static public function realPath(loop:Loop, path:NativeString, ?request:FileRequest, callback:(result:Result<NativeString>)->Void):Void;
|
|
|
|
/**
|
|
Changes owneship of the file at the given path.
|
|
**/
|
|
static public function chown(loop:Loop, path:NativeString, uid:Int, gid:Int, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Changes owneship of the file at the given path. without dereferencing symlinks.
|
|
**/
|
|
static public function lchown(loop:Loop, path:NativeString, uid:Int, gid:Int, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Changes owneship of the file.
|
|
**/
|
|
public function fchown(loop:Loop, uid:Int, gid:Int, ?request:FileRequest, callback:(result:Result<Result.NoData>)->Void):Void;
|
|
|
|
/**
|
|
Returns the integer representation of `eval.luv.File`.
|
|
|
|
`eval.luv.File` is defined as an integer file descriptor by libuv on all
|
|
platforms at the moment. This is a convenience function for interoperability
|
|
with `eval.luv.Process`, the API of which assumes that files are represented
|
|
by integers.
|
|
**/
|
|
public function toInt():Int;
|
|
}
|
|
|
|
/**
|
|
Synchronous version of `eval.luv.File` API
|
|
**/
|
|
extern class FileSync {
|
|
@:inheritDoc(eval.luv.File.open)
|
|
static function open(path:NativeString, flags:Array<FileOpenFlag>, ?mode:Array<FileMode>):Result<File>;
|
|
|
|
@:inheritDoc(eval.luv.File.close)
|
|
static function close(file:File):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.read)
|
|
static function read(file:File, fileOffset:Int64, buffers:Array<Buffer>):Result<UInt64>;
|
|
|
|
@:inheritDoc(eval.luv.File.write)
|
|
static function write(file:File, fileOffset:Int64, buffers:Array<Buffer>):Result<UInt64>;
|
|
|
|
@:inheritDoc(eval.luv.File.unlink)
|
|
static function unlink(path:NativeString):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.rename)
|
|
static function rename(path:NativeString, toPath:NativeString):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.mkstemp)
|
|
static function mkstemp(pattern:NativeString):Result<{name:NativeString,file:File}>;
|
|
|
|
@:inheritDoc(eval.luv.File.mkdtemp)
|
|
static function mkdtemp(pattern:NativeString):Result<NativeString>;
|
|
|
|
@:inheritDoc(eval.luv.File.mkdir)
|
|
static function mkdir(path:NativeString, ?mode:Array<FileMode>):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.rmdir)
|
|
static function rmdir(path:NativeString):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.stat)
|
|
static function stat(path:NativeString):Result<FileStat>;
|
|
|
|
@:inheritDoc(eval.luv.File.lstat)
|
|
static function lstat(path:NativeString):Result<FileStat>;
|
|
|
|
@:inheritDoc(eval.luv.File.fstat)
|
|
static function fstat(file:File):Result<FileStat>;
|
|
|
|
@:inheritDoc(eval.luv.File.statFs)
|
|
static function statFs(path:NativeString):Result<FileStatFs>;
|
|
|
|
@:inheritDoc(eval.luv.File.fsync)
|
|
static function fsync(file:File):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.fdataSync)
|
|
static function fdataSync(file:File):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.ftruncate)
|
|
static function ftruncate(file:File, length:Int64):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.copyFile)
|
|
static function copyFile(path:NativeString, toPath:NativeString, ?flags:Array<FileCopyFlag>):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.sendFile)
|
|
static function sendFile(file:File, toFile:File, offset:Int64, length:UInt64):Result<UInt64>;
|
|
|
|
@:inheritDoc(eval.luv.File.access)
|
|
static function access(path:NativeString, flags:Array<FileAccessFlag>):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.chmod)
|
|
static function chmod(path:NativeString, mode:Array<FileMode>):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.fchmod)
|
|
static function fchmod(file:File, mode:Array<FileMode>):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.utime)
|
|
static function utime(path:NativeString, atime:Float, mtime:Float):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.futime)
|
|
static function futime(file:File, atime:Float, mtime:Float):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.lutime)
|
|
static function lutime(path:NativeString, atime:Float, mtime:Float):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.link)
|
|
static function link(path:NativeString, link:NativeString):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.symlink)
|
|
static function symlink(path:NativeString, link:NativeString, ?flags:Array<FileSymlinkFlag>):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.readLink)
|
|
static function readLink(path:NativeString):Result<NativeString>;
|
|
|
|
@:inheritDoc(eval.luv.File.realPath)
|
|
static function realPath(path:NativeString):Result<NativeString>;
|
|
|
|
@:inheritDoc(eval.luv.File.chown)
|
|
static function chown(path:NativeString, uid:Int, gid:Int):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.lchown)
|
|
static function lchown(path:NativeString, uid:Int, gid:Int):Result<Result.NoData>;
|
|
|
|
@:inheritDoc(eval.luv.File.fchown)
|
|
static function fchown(file:File, uid:Int, gid:Int):Result<Result.NoData>;
|
|
|
|
} |