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>;
 | |
| 
 | |
| } |