Skip to content

holepunchto/bare-fs

Repository files navigation

bare-fs

Native file system operations for Bare. The API closely follows that of the Node.js fs module.

npm i bare-fs

Usage

const fs = require('bare-fs')

const fd = await fs.open('hello.txt')

const buffer = Buffer.alloc(1024)

try {
  const length = await fs.read(fd, buffer)

  console.log('Read', length, 'bytes')
} finally {
  await fs.close(fd)
}

API

const fd = await fs.open(filepath[, flags[, mode]])

Open a file, returning a file descriptor. flags defaults to 'r' and mode defaults to 0o666. flags may be a string such as 'r', 'w', 'a', 'r+', etc., or a numeric combination of fs.constants flags.

fs.open(filepath[, flags[, mode]], callback)

Callback version of fs.open().

const fd = fs.openSync(filepath[, flags[, mode]])

Synchronous version of fs.open().

await fs.close(fd)

Close a file descriptor.

fs.close(fd, callback)

Callback version of fs.close().

fs.closeSync(fd)

Synchronous version of fs.close().

await fs.access(filepath[, mode])

Check whether the file at filepath is accessible. mode defaults to fs.constants.F_OK.

fs.access(filepath[, mode], callback)

Callback version of fs.access().

fs.accessSync(filepath[, mode])

Synchronous version of fs.access().

const exists = await fs.exists(filepath)

Check whether a file exists at filepath. Returns true if the file is accessible, false otherwise.

fs.exists(filepath, callback)

Callback version of fs.exists().

const exists = fs.existsSync(filepath)

Synchronous version of fs.exists().

const bytesRead = await fs.read(fd, buffer[, offset[, len[, pos]]])

Read from a file descriptor into buffer. offset defaults to 0, len defaults to buffer.byteLength - offset, and pos defaults to -1 (current position). Returns the number of bytes read.

fs.read(fd, buffer[, offset[, len[, pos]]], callback)

Callback version of fs.read().

const bytesRead = fs.readSync(fd, buffer[, offset[, len[, pos]]])

Synchronous version of fs.read().

const bytesRead = await fs.readv(fd, buffers[, pos])

Read from a file descriptor into an array of buffers. pos defaults to -1.

fs.readv(fd, buffers[, pos], callback)

Callback version of fs.readv().

const bytesRead = fs.readvSync(fd, buffers[, pos])

Synchronous version of fs.readv().

const bytesWritten = await fs.write(fd, data[, offset[, len[, pos]]])

Write data to a file descriptor. When data is a string, the signature is fs.write(fd, data[, pos[, encoding]]) where encoding defaults to 'utf8'. Returns the number of bytes written.

fs.write(fd, data[, offset[, len[, pos]]], callback)

Callback version of fs.write().

const bytesWritten = fs.writeSync(fd, data[, offset[, len[, pos]]])

Synchronous version of fs.write().

const bytesWritten = await fs.writev(fd, buffers[, pos])

Write an array of buffers to a file descriptor. pos defaults to -1.

fs.writev(fd, buffers[, pos], callback)

Callback version of fs.writev().

const bytesWritten = fs.writevSync(fd, buffers[, pos])

Synchronous version of fs.writev().

const stats = await fs.stat(filepath)

Get the status of a file. Returns a Stats object.

fs.stat(filepath, callback)

Callback version of fs.stat().

const stats = fs.statSync(filepath)

Synchronous version of fs.stat().

const stats = await fs.lstat(filepath)

Like fs.stat(), but if filepath is a symbolic link, the link itself is statted, not the file it refers to.

fs.lstat(filepath, callback)

Callback version of fs.lstat().

const stats = fs.lstatSync(filepath)

Synchronous version of fs.lstat().

const stats = await fs.fstat(fd)

Get the status of a file by its file descriptor. Returns a Stats object.

fs.fstat(fd, callback)

Callback version of fs.fstat().

const stats = fs.fstatSync(fd)

Synchronous version of fs.fstat().

await fs.ftruncate(fd[, len])

Truncate a file to len bytes. len defaults to 0.

fs.ftruncate(fd[, len], callback)

Callback version of fs.ftruncate().

fs.ftruncateSync(fd[, len])

Synchronous version of fs.ftruncate().

await fs.chmod(filepath, mode)

Change the permissions of a file. mode may be a numeric mode or a string that will be parsed as octal.

fs.chmod(filepath, mode, callback)

Callback version of fs.chmod().

fs.chmodSync(filepath, mode)

Synchronous version of fs.chmod().

await fs.fchmod(fd, mode)

Change the permissions of a file by its file descriptor.

fs.fchmod(fd, mode, callback)

Callback version of fs.fchmod().

fs.fchmodSync(fd, mode)

Synchronous version of fs.fchmod().

await fs.utimes(filepath, atime, mtime)

Change the access and modification times of a file. Times may be numbers (seconds since epoch) or Date objects.

fs.utimes(filepath, atime, mtime, callback)

Callback version of fs.utimes().

fs.utimesSync(filepath, atime, mtime)

Synchronous version of fs.utimes().

await fs.mkdir(filepath[, opts])

Create a directory at filepath.

Options include:

options = {
  mode: 0o777,
  recursive: false
}

If opts is a number, it is treated as the mode. When recursive is true, parent directories are created as needed.

fs.mkdir(filepath[, opts], callback)

Callback version of fs.mkdir().

fs.mkdirSync(filepath[, opts])

Synchronous version of fs.mkdir().

await fs.rmdir(filepath)

Remove an empty directory.

fs.rmdir(filepath, callback)

Callback version of fs.rmdir().

fs.rmdirSync(filepath)

Synchronous version of fs.rmdir().

await fs.rm(filepath[, opts])

Remove a file or directory at filepath.

Options include:

options = {
  force: false,
  recursive: false
}

When recursive is true, directories are removed along with their contents. When force is true, no error is thrown if filepath does not exist.

fs.rm(filepath[, opts], callback)

Callback version of fs.rm().

fs.rmSync(filepath[, opts])

Synchronous version of fs.rm().

await fs.unlink(filepath)

Remove a file.

fs.unlink(filepath, callback)

Callback version of fs.unlink().

fs.unlinkSync(filepath)

Synchronous version of fs.unlink().

await fs.rename(src, dst)

Rename a file from src to dst.

fs.rename(src, dst, callback)

Callback version of fs.rename().

fs.renameSync(src, dst)

Synchronous version of fs.rename().

await fs.copyFile(src, dst[, mode])

Copy a file from src to dst. mode is an optional bitmask created from fs.constants.COPYFILE_EXCL, fs.constants.COPYFILE_FICLONE, or fs.constants.COPYFILE_FICLONE_FORCE.

fs.copyFile(src, dst[, mode], callback)

Callback version of fs.copyFile().

fs.copyFileSync(src, dst[, mode])

Synchronous version of fs.copyFile().

await fs.cp(src, dst[, opts])

Copy a file or directory from src to dst.

Options include:

options = {
  recursive: false
}

Set recursive to true to copy directories and their contents. Files are copied preserving their permissions.

fs.cp(src, dst[, opts], callback)

Callback version of fs.cp().

fs.cpSync(src, dst[, opts])

Synchronous version of fs.cp().

const resolved = await fs.realpath(filepath[, opts])

Resolve the real path of filepath, expanding all symbolic links.

Options include:

options = {
  encoding: 'utf8'
}

Set encoding to 'buffer' to receive the result as a Buffer.

fs.realpath(filepath[, opts], callback)

Callback version of fs.realpath().

const resolved = fs.realpathSync(filepath[, opts])

Synchronous version of fs.realpath().

const target = await fs.readlink(filepath[, opts])

Read the target of a symbolic link.

Options include:

options = {
  encoding: 'utf8'
}

fs.readlink(filepath[, opts], callback)

Callback version of fs.readlink().

const target = fs.readlinkSync(filepath[, opts])

Synchronous version of fs.readlink().

await fs.symlink(target, filepath[, type])

Create a symbolic link at filepath pointing to target. type may be 'file', 'dir', or 'junction' (Windows only) or a numeric flag. On Windows, if type is not provided, it is inferred from the target.

fs.symlink(target, filepath[, type], callback)

Callback version of fs.symlink().

fs.symlinkSync(target, filepath[, type])

Synchronous version of fs.symlink().

const dir = await fs.opendir(filepath[, opts])

Open a directory for iteration. Returns a Dir object.

Options include:

options = {
  encoding: 'utf8',
  bufferSize: 32
}

fs.opendir(filepath[, opts], callback)

Callback version of fs.opendir().

const dir = fs.opendirSync(filepath[, opts])

Synchronous version of fs.opendir().

const entries = await fs.readdir(filepath[, opts])

Read the contents of a directory. Returns an array of filenames or, if withFileTypes is true, an array of Dirent objects.

Options include:

options = {
  encoding: 'utf8',
  withFileTypes: false
}

fs.readdir(filepath[, opts], callback)

Callback version of fs.readdir().

const entries = fs.readdirSync(filepath[, opts])

Synchronous version of fs.readdir().

const data = await fs.readFile(filepath[, opts])

Read the entire contents of a file. Returns a Buffer by default, or a string if an encoding is specified.

Options include:

options = {
  encoding: 'buffer',
  flag: 'r'
}

fs.readFile(filepath[, opts], callback)

Callback version of fs.readFile().

const data = fs.readFileSync(filepath[, opts])

Synchronous version of fs.readFile().

await fs.writeFile(filepath, data[, opts])

Write data to a file, replacing it if it already exists.

Options include:

options = {
  encoding: 'utf8',
  flag: 'w',
  mode: 0o666
}

fs.writeFile(filepath, data[, opts], callback)

Callback version of fs.writeFile().

fs.writeFileSync(filepath, data[, opts])

Synchronous version of fs.writeFile().

await fs.appendFile(filepath, data[, opts])

Append data to a file, creating it if it does not exist. Accepts the same options as fs.writeFile() but defaults to the 'a' flag.

fs.appendFile(filepath, data[, opts], callback)

Callback version of fs.appendFile().

fs.appendFileSync(filepath, data[, opts])

Synchronous version of fs.appendFile().

const watcher = fs.watch(filepath[, opts], callback)

Watch a file or directory for changes. Returns a Watcher object. The callback, if provided, is called with (eventType, filename) on each change.

Options include:

options = {
  persistent: true,
  recursive: false,
  encoding: 'utf8'
}

const stream = fs.createReadStream(path[, opts])

Create a readable stream for a file. Returns a ReadStream.

Options include:

options = {
  fd: -1,
  flags: 'r',
  mode: 0o666,
  start: 0,
  end: Infinity
}

If fd is provided, path may be null and the stream reads from the given file descriptor.

const stream = fs.createWriteStream(path[, opts])

Create a writable stream for a file. Returns a WriteStream.

Options include:

options = {
  fd: -1,
  flags: 'w',
  mode: 0o666
}

If fd is provided, path may be null and the stream writes to the given file descriptor.

fs.constants

An object containing file system constants. See fs/constants for the full list. Commonly used constants include:

  • fs.constants.O_RDONLY, fs.constants.O_WRONLY, fs.constants.O_RDWR — file access flags
  • fs.constants.O_CREAT, fs.constants.O_TRUNC, fs.constants.O_APPEND — file creation flags
  • fs.constants.F_OK, fs.constants.R_OK, fs.constants.W_OK, fs.constants.X_OK — file accessibility flags
  • fs.constants.S_IFMT, fs.constants.S_IFREG, fs.constants.S_IFDIR, fs.constants.S_IFLNK — file type flags
  • fs.constants.COPYFILE_EXCL, fs.constants.COPYFILE_FICLONE, fs.constants.COPYFILE_FICLONE_FORCE — copy flags

Stats

Returned by fs.stat(), fs.lstat(), and fs.fstat().

stats.dev

The device identifier.

stats.mode

The file mode (type and permissions).

stats.nlink

The number of hard links.

stats.uid

The user identifier of the file owner.

stats.gid

The group identifier of the file owner.

stats.rdev

The device identifier for special files.

stats.blksize

The file system block size for I/O operations.

stats.ino

The inode number.

stats.size

The size of the file in bytes.

stats.blocks

The number of 512-byte blocks allocated.

stats.atimeMs

The access time in milliseconds since the epoch.

stats.mtimeMs

The modification time in milliseconds since the epoch.

stats.ctimeMs

The change time in milliseconds since the epoch.

stats.birthtimeMs

The creation time in milliseconds since the epoch.

stats.atime

The access time as a Date object.

stats.mtime

The modification time as a Date object.

stats.ctime

The change time as a Date object.

stats.birthtime

The creation time as a Date object.

stats.isDirectory()

Returns true if the file is a directory.

stats.isFile()

Returns true if the file is a regular file.

stats.isBlockDevice()

Returns true if the file is a block device.

stats.isCharacterDevice()

Returns true if the file is a character device.

stats.isFIFO()

Returns true if the file is a FIFO (named pipe).

stats.isSymbolicLink()

Returns true if the file is a symbolic link. Only meaningful when using fs.lstat().

stats.isSocket()

Returns true if the file is a socket.

Dir

Returned by fs.opendir(). Supports both synchronous and asynchronous iteration.

dir.path

The path of the directory.

const dirent = await dir.read()

Read the next directory entry. Returns a Dirent or null when all entries have been read.

dir.read(callback)

Callback version of dir.read().

const dirent = dir.readSync()

Synchronous version of dir.read().

await dir.close()

Close the directory handle.

dir.close(callback)

Callback version of dir.close().

dir.closeSync()

Synchronous version of dir.close().

Dirent

Represents a directory entry, returned when iterating a Dir or using fs.readdir() with withFileTypes: true.

dirent.parentPath

The path of the parent directory.

dirent.name

The name of the directory entry, as a string or Buffer depending on the encoding.

dirent.type

The numeric type of the directory entry.

dirent.isFile()

Returns true if the entry is a regular file.

dirent.isDirectory()

Returns true if the entry is a directory.

dirent.isSymbolicLink()

Returns true if the entry is a symbolic link.

dirent.isFIFO()

Returns true if the entry is a FIFO.

dirent.isSocket()

Returns true if the entry is a socket.

dirent.isCharacterDevice()

Returns true if the entry is a character device.

dirent.isBlockDevice()

Returns true if the entry is a block device.

ReadStream

A readable stream for file data, created by fs.createReadStream(). Extends Readable from https://github.com/holepunchto/bare-stream.

stream.path

The file path, or null if opened by file descriptor.

stream.fd

The underlying file descriptor.

stream.flags

The flags the file was opened with.

stream.mode

The mode the file was opened with.

WriteStream

A writable stream for file data, created by fs.createWriteStream(). Extends Writable from https://github.com/holepunchto/bare-stream.

stream.path

The file path, or null if opened by file descriptor.

stream.fd

The underlying file descriptor.

stream.flags

The flags the file was opened with.

stream.mode

The mode the file was opened with.

Watcher

Watches for file system changes, created by fs.watch(). Extends EventEmitter from https://github.com/holepunchto/bare-events.

watcher.close()

Stop watching for changes.

watcher.ref()

Prevent the event loop from exiting while the watcher is active.

watcher.unref()

Allow the event loop to exit even if the watcher is still active.

event: 'change'

Emitted with (eventType, filename) when a change is detected. eventType is either 'rename' or 'change'.

event: 'error'

Emitted with (err) when an error occurs.

event: 'close'

Emitted when the watcher is closed.

FileHandle

Returned by require('bare-fs/promises').open(). Provides an object-oriented API for working with file descriptors.

await handle.close()

Close the file handle.

const { bytesRead, buffer } = await handle.read(buffer[, offset[, len[, pos]]])

Read from the file into buffer.

const { bytesRead, buffers } = await handle.readv(buffers[, pos])

Read from the file into an array of buffers.

const { bytesWritten, buffer } = await handle.write(data[, offset[, len[, pos]]])

Write data to the file.

const { bytesWritten, buffers } = await handle.writev(buffers[, pos])

Write an array of buffers to the file.

const stats = await handle.stat()

Get the status of the file.

await handle.chmod(mode)

Change the permissions of the file.

const stream = handle.createReadStream([opts])

Create a readable stream for the file.

const stream = handle.createWriteStream([opts])

Create a writable stream for the file.

event: 'close'

Emitted when the file handle is closed.

License

Apache-2.0

About

Native file system operations for Bare

Resources

License

Stars

Watchers

Forks

Contributors