The @effect/platform/FileSystem module provides a set of operations for reading and writing from/to the file system.
Basic Usage
The module provides a single FileSystemtag, which acts as the gateway for interacting with the filesystem.
Example (Accessing File System Operations)
The FileSystem interface includes the following operations:
Operation
Description
access
Check if a file can be accessed. You can optionally specify the level of access to check for.
copy
Copy a file or directory from fromPath to toPath. Equivalent to cp -r.
copyFile
Copy a file from fromPath to toPath.
chmod
Change the permissions of a file.
chown
Change the owner and group of a file.
exists
Check if a path exists.
link
Create a hard link from fromPath to toPath.
makeDirectory
Create a directory at path. You can optionally specify the mode and whether to recursively create nested directories.
makeTempDirectory
Create a temporary directory. By default, the directory will be created inside the system’s default temporary directory.
makeTempDirectoryScoped
Create a temporary directory inside a scope. Functionally equivalent to makeTempDirectory, but the directory will be automatically deleted when the scope is closed.
makeTempFile
Create a temporary file. The directory creation is functionally equivalent to makeTempDirectory. The file name will be a randomly generated string.
makeTempFileScoped
Create a temporary file inside a scope. Functionally equivalent to makeTempFile, but the file will be automatically deleted when the scope is closed.
open
Open a file at path with the specified options. The file handle will be automatically closed when the scope is closed.
readDirectory
List the contents of a directory. You can recursively list the contents of nested directories by setting the recursive option.
readFile
Read the contents of a file.
readFileString
Read the contents of a file as a string.
readLink
Read the destination of a symbolic link.
realPath
Resolve a path to its canonicalized absolute pathname.
remove
Remove a file or directory. By setting the recursive option to true, you can recursively remove nested directories.
rename
Rename a file or directory.
sink
Create a writable Sink for the specified path.
stat
Get information about a file at path.
stream
Create a readable Stream for the specified path.
symlink
Create a symbolic link from fromPath to toPath.
truncate
Truncate a file to a specified length. If the length is not specified, the file will be truncated to length 0.
utimes
Change the file system timestamps of the file at path.
Provides a way to write effectful code using generator functions, simplifying
control flow and error handling.
When to Use
gen allows you to write code that looks and behaves like synchronous
code, but it can handle asynchronous tasks, errors, and complex control flow
(like loops and conditions). It helps make asynchronous code more readable
and easier to manage.
The generator functions work similarly to async/await but with more
explicit control over the execution of effects. You can yield* values from
effects and return the final result at the end.
The console module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
A Console class with methods such as console.log(), console.error() and console.warn() that can be used to write to any Node.js stream.
A global console instance configured to write to process.stdout and
process.stderr. The global console can be used without importing the node:console module.
Warning: The global console object's methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the note on process I/O for
more information.
Example using the global console:
console.log('hello world');
// Prints: hello world, to stdout
console.log('hello %s', 'world');
// Prints: hello world, to stdout
console.error(newError('Whoops, something bad happened'));
// Prints error message and stack trace to stderr:
// Error: Whoops, something bad happened
// at [eval]:5:15
// at Script.runInThisContext (node:vm:132:18)
// at Object.runInThisContext (node:vm:309:38)
// at node:internal/process/execution:77:19
// at [eval]-wrapper:6:22
// at evalScript (node:internal/process/execution:76:60)
// at node:internal/main/eval_string:23:3
constname='Will Robinson';
console.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to stderr
Example using the Console class:
constout=getStreamSomehow();
consterr=getStreamSomehow();
constmyConsole=new console.Console(out, err);
myConsole.log('hello world');
// Prints: hello world, to out
myConsole.log('hello %s', 'world');
// Prints: hello world, to out
myConsole.error(newError('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to err
Prints to stdout with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to printf(3)
(the arguments are all passed to util.format()).