/// declare module "fs" { /** * File system flag that controls opening of a file. * * - `'a'` - Open a file for appending. The file is created if it does not exist. * - `'ax'` - The same as `'a'` but fails if the file already exists. * - `'a+'` - Open a file for reading and appending. If the file does not exist, it will be created. * - `'ax+'` - The same as `'a+'` but fails if the file already exists. * - `'as'` - Open a file for appending in synchronous mode. If the file does not exist, it will be created. * - `'as+'` - Open a file for reading and appending in synchronous mode. If the file does not exist, it will be created. * - `'r'` - Open a file for reading. An exception occurs if the file does not exist. * - `'r+'` - Open a file for reading and writing. An exception occurs if the file does not exist. * - `'rs+'` - Open a file for reading and writing in synchronous mode. Instructs the operating system to bypass the local file system cache. * - `'w'` - Open a file for writing. If the file does not exist, it will be created. If the file exists, it will be replaced. * - `'wx'` - The same as `'w'` but fails if the file already exists. * - `'w+'` - Open a file for reading and writing. If the file does not exist, it will be created. If the file exists, it will be replaced. * - `'wx+'` - The same as `'w+'` but fails if the file already exists. */ export type OpenMode = "a" | "ax" | "a+" | "ax+" | "as" | "as+" | "r" | "r+" | "rs+" | "w" | "wx" | "w+" | "wx+"; export type FileEncoding = BufferEncoding; /** * Valid types for path values in "fs". */ export type PathLike = string | Buffer; /** * A representation of a directory entry - a file or a subdirectory. * * When `readdirSync()` is called with the `withFileTypes` option, the resulting array contains * `fs.Dirent` objects. */ export interface NjsDirent { /** * @returns `true` if the object describes a block device. */ isBlockDevice(): boolean; /** * @returns `true` if the object describes a character device. */ isCharacterDevice(): boolean; /** * @returns `true` if the object describes a file system directory. */ isDirectory(): boolean; /** * @returns `true` if the object describes a first-in-first-out (FIFO) pipe. */ isFIFO(): boolean; /** * @returns `true` if the object describes a regular file. */ isFile(): boolean; /** * @returns `true` if the object describes a socket. */ isSocket(): boolean; /** * @returns `true` if the object describes a symbolic link. */ isSymbolicLink(): boolean; /** * The name of the file this object refers to. */ name: string; } /** * Stats object provides information about a file. * * The objects is returned from fs.stat(), fs.lstat() and friends. */ export interface NjsStats { /** * @returns `true` if the object describes a block device. */ isBlockDevice(): boolean; /** * @returns `true` if the object describes a character device. */ isCharacterDevice(): boolean; /** * @returns `true` if the object describes a file system directory. */ isDirectory(): boolean; /** * @returns `true` if the object describes a first-in-first-out (FIFO) pipe. */ isFIFO(): boolean; /** * @returns `true` if the object describes a regular file. */ isFile(): boolean; /** * @returns `true` if the object describes a socket. */ isSocket(): boolean; /** * @returns `true` if the object describes a symbolic link. */ isSymbolicLink(): boolean; /** * The numeric identifier of the device containing the file. */ dev: number; /** * The file system specific "Inode" number for the file. */ ino: number; /** * A bit-field describing the file type and mode. */ mode: number; /** * The number of hard-links that exist for the file. */ nlink: number; /** * The numeric user identifier of the user that owns the file (POSIX). */ uid: number; /** * The numeric group identifier of the group that owns the file (POSIX). */ gid: number; /** * A numeric device identifier if the file represents a device. */ rdev: number; /** * The size of the file in bytes. */ size: number; /** * The file system block size for i/o operations. */ blksize: number; /** * The number of blocks allocated for this file. */ blocks: number; /** * The timestamp indicating the last time this file was accessed expressed * in milliseconds since the POSIX Epoch. */ atimeMs: number; /** * The timestamp indicating the last time this file was modified expressed * in milliseconds since the POSIX Epoch. */ mtimeMs: number; /** * The timestamp indicating the last time this file was changed expressed * in milliseconds since the POSIX Epoch. */ ctimeMs: number; /** * The timestamp indicating the creation time of this file expressed * in milliseconds since the POSIX Epoch. */ birthtimeMs: number; /** * The timestamp indicating the last time this file was accessed. */ atime: Date; /** * The timestamp indicating the last time this file was modified. */ mtime: Date; /** * The timestamp indicating the last time this file was changed. */ ctime: Date; /** * The timestamp indicating the creation time of this file. */ birthtime: Date; } type WriteFileOptions = { mode?: number; flag?: OpenMode; }; type NjsFsConstants = { /** * Indicates that the file is visible to the calling process, used by default if no mode * is specified. */ F_OK: 0; /** * Indicates that the file can be read by the calling process. */ R_OK: 4; /** * Indicates that the file can be written by the calling process. */ W_OK: 2; /** * Indicates that the file can be executed by the calling process. */ X_OK: 1; }; interface NjsFsPromises { /** * Asynchronously tests permissions for a file or directory specified in the `path`. * If the check fails, an error will be returned, otherwise, the method will return undefined. * * @example * import fs from 'fs' * fs.promises.access('/file/path', fs.constants.R_OK | fs.constants.W_OK) * .then(() => console.log('has access')) * .catch(() => console.log('no access')) * * @since 0.3.9 * @param path A path to a file or directory. * @param mode An optional integer that specifies the accessibility checks to be performed. * Defaults to `fs.constants.F_OK`. */ access(path: PathLike, mode?: number): Promise; /** * Asynchronously opens a file specified in the `path`. * * @example * import fs from 'fs' * let fh = await fs.promises.open('/file/path', 'w'); * let bw = await fh.write("data to write", 10); * * @since 0.7.7 * @param path A path to a file. * @param flags File system flags, defaults to `r`. * @param mode The file mode, defaults to 0o666. */ open(path: PathLike, flags?: OpenMode, mode?: number): Promise; /** * Asynchronously appends specified `data` to a file with provided `filename`. * If the file does not exist, it will be created. * * @since 0.4.4 * @param path A path to a file. * @param data The data to write. * @param options An object optionally specifying the file mode and flag. * If `mode` is not supplied, the default of `0o666` is used. * If `flag` is not supplied, the default of `'a'` is used. */ appendFile(path: PathLike, data: NjsStringOrBuffer, options?: WriteFileOptions): Promise; /** * Asynchronously retrieves `fs.Stats` object for the symbolic link referred to by `path`. * See `lstat(2)` for more details. * * @since 0.7.1 * @param path A path to a file. * @param options An object with the following optional keys: * - `throwIfNoEntry` - Whether an exception will be thrown if no file system entry exists, * rather than returning undefined, defaults to `true`. */ lstat(path: PathLike, options?: { throwIfNoEntry?: boolean; }): Promise; /** * Asynchronously creates a directory at the specified `path`. * * @since 0.4.2 * @param path A path to a file. * @param options A number specifying file mode, defaults to `0o777`. * @param options An object with the following optional keys: * - `mode` - A number specifying file mode, defaults to `0o777`. * - `recursive` - If true, perform a recursive directory creation, defaults to `false`. */ mkdir(path: PathLike, options?: { mode?: number; recursive?: boolean; } | number): Promise; /** * Asynchronously reads the contents of a directory at the specified `path`. * * @since 0.4.2 * @param path A path to a file. * @param options A string that specifies encoding or an object optionally specifying * the following keys: * - `encoding` - `'utf8'` (default) or `'buffer'` (since 0.4.4) * - `withFileTypes` - if set to `true`, the files array will contain `fs.Dirent` objects; defaults to `false`. */ readdir(path: PathLike, options?: { encoding?: "utf8"; withFileTypes?: false; } | "utf8"): Promise; readdir(path: PathLike, options: { encoding: "buffer"; withFileTypes?: false; } | "buffer"): Promise; readdir(path: PathLike, options: { encoding?: "utf8" | "buffer"; withFileTypes: true; }): Promise; /** * Asynchronously returns the contents of the file with provided `filename`. * If an encoding is specified, a `string` is returned, otherwise, a `Buffer`. * * @param path A path to a file. * @param options A string that specifies encoding or an object with the following optional keys: * - `encoding` - `'utf8'`, `'hex'`, `'base64'`, or `'base64url'` (the last three since 0.4.4). * - `flag` - file system flag, defaults to `r`. */ readFile(path: PathLike): Promise; readFile(path: PathLike, options?: { flag?: OpenMode; }): Promise; readFile(path: PathLike, options: { encoding?: FileEncoding; flag?: OpenMode; } | FileEncoding): Promise; /** * Asynchronously computes the canonical pathname by resolving `.`, `..` and symbolic links using * `realpath(3)`. * * @since 0.3.9 * @param path A path to a file. * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. */ realpath(path: PathLike, options?: { encoding?: "utf8" } | "utf8"): Promise; realpath(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise; /** * Asynchronously changes the name or location of a file from `oldPath` to `newPath`. * * @since 0.3.4 * @param oldPath A path to a file. * @param newPath A path to a file. */ rename(oldPath: PathLike, newPath: PathLike): Promise; /** * Asynchronously removes a directory at the specified `path`. * * @since 0.4.2 * @param path A path to a file. * @param options An object with the following optional keys: * - `recursive` - If true, perform a recursive directory removal, defaults to `false`. */ rmdir(path: PathLike, options?: { recursive?: boolean; }): Promise; /** * Asynchronously retrieves `fs.Stats` object for the specified `path`. * * @since 0.7.1 * @param path A path to a file. * @param options An object with the following optional keys: * - `throwIfNoEntry` - Whether an exception will be thrown if no file system entry exists, * rather than returning undefined, defaults to `true`. */ stat(path: PathLike, options?: { throwIfNoEntry?: boolean; }): Promise; /** * Asynchronously creates the link called `path` pointing to `target` using `symlink(2)`. * Relative targets are relative to the link’s parent directory. * * @since 0.3.9 * @param target A path to an existing file. * @param path A path to the new symlink. */ symlink(target: PathLike, path: PathLike): Promise; /** * Asynchronously unlinks a file by `path`. * * @since 0.3.9 * @param path A path to a file. */ unlink(path: PathLike): Promise; /** * Asynchronously writes `data` to a file with provided `filename`. If the file does not * exist, it will be created, if the file exists, it will be replaced. * * @since 0.4.4 * @param path A path to a file. * @param data The data to write. * @param options An object optionally specifying the file mode and flag. * If `mode` is not supplied, the default of `0o666` is used. * If `flag` is not supplied, the default of `'w'` is used. */ writeFile(path: PathLike, data: NjsStringOrBuffer, options?: WriteFileOptions): Promise; } interface NjsFsBytesRead { /** * The number of bytes read. */ bytesRead: number; /** * A reference to the passed in buffer argument. */ buffer: NjsBuffer; } interface NjsFsBytesWritten { /** * The number of bytes written. */ bytesWritten: number; /** * A reference to the buffer written. */ buffer: NjsBuffer; } interface NjsFsFileHandle { /** * Asynchronously closes the file handle after waiting for any pending operation * on the handle to complete. */ close(): Promise; /** * The file descriptor number. */ fd: number; /** * Asynchronously reads data from the file and stores that in the given buffer. * * @param buffer A buffer that will be filled with the file data read. * @param offset The location in the buffer at which to start filling. * @param length The number of bytes to read. * @param position The location where to begin reading data from the file. * If null, data will be read from the current file position, and the position will be updated. * If position is an integer, the current file position will remain unchanged. */ read(buffer: NjsBuffer, offset: number, length: number, position: number | null): Promise; /** * Asynchronously retrieves `fs.Stats` for the underlying descriptor. */ stat(): Promise; /** * Asynchronously writes buffer to the file. * * @param buffer A buffer to write. * @param offset The start position from within buffer where the data to write begins. * @param The number of bytes from buffer to write. * Defaults to buffer.byteLength - offset * @param position The offset from the beginning of the file where the data from buffer * should be written. If position is not a number, the data will be written at the current position. * @param encoding One of the `'utf8'`, `'hex'`, `'base64'`, or `'base64url'`. * Defaults to 'utf8'. */ write(buffer: NjsBuffer, offset: number, length?: number, position?: number | null): Promise; write(buffer: string, position?: number | null, encoding?: FileEncoding): Promise; } interface NjsFS { /** * Promissified versions of file system methods. * * @since 0.3.9 */ promises: NjsFsPromises /** * Synchronously closes specified file descriptor. * * @since 0.7.7 * @param fd A file descriptor. */ closeSync(fd: number): undefined; /** * File Access Constants */ constants: NjsFsConstants /** * Synchronously tests permissions for a file or directory specified in the `path`. * If the check fails, an error will be returned, otherwise, the method will return undefined. * * @example * try { * fs.accessSync('/file/path', fs.constants.R_OK | fs.constants.W_OK); * console.log('has access'); * } catch (e) { * console.log('no access'); * } * * @since 0.3.9 * @param path A path to a file or directory. * @param mode An optional integer that specifies the accessibility checks to be performed. * Defaults to `fs.constants.F_OK`. */ accessSync(path: PathLike, mode?: number): void; /** * Synchronously appends specified `data` to a file with provided `filename`. * If the file does not exist, it will be created. * * @since 0.4.4 * @param path A path to a file. * @param data The data to write. * @param options An object optionally specifying the file mode and flag. * If `mode` is not supplied, the default of `0o666` is used. * If `flag` is not supplied, the default of `'a'` is used. */ appendFileSync(path: PathLike, data: NjsStringOrBuffer, options?: WriteFileOptions): void; /** * Synchronously retrieves `fs.Stats` object for specified file descriptor. * * @since 0.7.7 * @param fd A file descriptor. */ fstatSync(fd: number): NjsStats; /** * Synchronously retrieves `fs.Stats` object for the symbolic link referred to by path. * See `lstat(2)` for more details. * * @since 0.7.1 * @param path A path to a file. * @param options An object with the following optional keys: * - `throwIfNoEntry` - Whether an exception will be thrown if no file system entry exists, * rather than returning undefined, defaults to `true`. */ lstatSync(path: PathLike, options?: { throwIfNoEntry?: boolean; }): NjsStats; /** * Synchronously creates a directory at the specified `path`. * * @since 0.4.2 * @param path A path to a file. * @param options A number specifying file mode. defaults to `0o777`. * @param options An object with the following optional keys: * - `mode` - A number specifying file mode, defaults to `0o777`. * - `recursive` - If true, perform a recursive directory creation, defaults to `false`. */ mkdirSync(path: PathLike, options?: { mode?: number; recursive?: boolean; } | number): void; /** * Synchronously opens a file specified in the `path`. * * @example * import fs from 'fs' * let fd = fs.openSync('/file/path', 'w'); * let bytesWritten = fs.writeSync("data to write", 10); * * @since 0.7.7 * @param path A path to a file. * @param flags file system flags, defaults to `r`. * @param mode Thre file mode, defaults to 0o666. */ openSync(path: PathLike, flags?: OpenMode, mode?: number): number; /** * Synchronously reads the contents of a directory at the specified `path`. * * @since 0.4.2 * @param path A path to a file. * @param options A string that specifies encoding or an object optionally specifying * the following keys: * - `encoding` - `'utf8'` (default) or `'buffer'` (since 0.4.4) * - `withFileTypes` - if set to `true`, the files array will contain `fs.Dirent` objects; * defaults to `false`. */ readdirSync(path: PathLike, options?: { encoding?: "utf8"; withFileTypes?: false; } | "utf8"): string[]; readdirSync(path: PathLike, options: { encoding: "buffer"; withFileTypes?: false; } | "buffer"): Buffer[]; readdirSync(path: PathLike, options: { encoding?: "utf8" | "buffer"; withFileTypes: true; }): NjsDirent[]; /** * Synchronously returns the contents of the file with provided `filename`. * If an encoding is specified, a `string` is returned, otherwise, a `Buffer`. * * @example * import fs from 'fs' * var file = fs.readFileSync('/file/path.tar.gz') * var gzipped = file.slice(0,2).toString('hex') === '1f8b'; gzipped // => true * * @param path A path to a file. * @param options A string that specifies encoding or an object with the following optional keys: * - `encoding` - `'utf8'`, `'hex'`, `'base64'`, or `'base64url'` (the last three since 0.4.4). * - `flag` - file system flag, defaults to `r`. */ readFileSync(path: PathLike): Buffer; readFileSync(path: PathLike, options?: { flag?: OpenMode; }): Buffer; readFileSync(path: PathLike, options: { encoding?: FileEncoding; flag?: OpenMode; } | FileEncoding): string; /** * Synchronously reads data from the file and stores that in the given buffer. * * @since 0.7.7 * @param fd A file descriptor. * @param buffer A buffer that will be filled with the file data read. * @param offset The location in the buffer at which to start filling. * @param length The number of bytes to read. * @param position The location where to begin reading data from the file. * If null, data will be read from the current file position, and the position will be updated. * If position is an integer, the current file position will remain unchanged. * @param encoding One of the `'utf8'`, `'hex'`, `'base64'`, or `'base64url'`. * Defaults to 'utf8'. */ readSync(fd: number, buffer: NjsBuffer, offset: number, length?: number, position?: number | null): number; readSync(fd: number, string: string, position?: number | null, encoding?: FileEncoding): number; /** * Synchronously computes the canonical pathname by resolving `.`, `..` and symbolic links using * `realpath(3)`. * * @since 0.3.9 * @param path A path to a file. * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. */ realpathSync(path: PathLike, options?: { encoding?: "utf8" } | "utf8"): string; realpathSync(path: PathLike, options: { encoding: "buffer" } | "buffer"): Buffer; /** * Synchronously changes the name or location of a file from `oldPath` to `newPath`. * * @example * import fs from 'fs' * var file = fs.renameSync('hello.txt', 'HelloWorld.txt') * * @since 0.3.4 * @param oldPath A path to a file. * @param newPath A path to a file. */ renameSync(oldPath: PathLike, newPath: PathLike): void; /** * Synchronously removes a directory at the specified `path`. * * @since 0.4.2 * @param path A path to a file. * @param options An object with the following optional keys: * - `recursive` - If true, perform a recursive directory removal, defaults to `false`. */ rmdirSync(path: PathLike, options?: { recursive?: boolean; }): void; /** * Synchronously retrieves `fs.Stats` object for the specified path. * * @since 0.7.1 * @param path A path to a file. * @param options An object with the following optional keys: * - `throwIfNoEntry` - Whether an exception will be thrown if no file system entry exists, * rather than returning undefined, defaults to `true`. */ statSync(path: PathLike, options?: { throwIfNoEntry?: boolean; }): NjsStats; /** * Synchronously creates the link called `path` pointing to `target` using `symlink(2)`. * Relative targets are relative to the link’s parent directory. * * @since 0.3.9 * @param target A path to an existing file. * @param path A path to the new symlink. */ symlinkSync(target: PathLike, path: PathLike): void; /** * Synchronously unlinks a file by `path`. * * @since 0.3.9 * @param path A path to a file. */ unlinkSync(path: PathLike): void; /** * Synchronously writes `data` to a file with provided `filename`. If the file does not exist, * it will be created, if the file exists, it will be replaced. * * @example * import fs from 'fs' * fs.writeFileSync('hello.txt', 'Hello world') * * @since 0.4.4 * @param path A path to a file. * @param data The data to write. * @param options An object optionally specifying the file mode and flag. * If `mode` is not supplied, the default of `0o666` is used. * If `flag` is not supplied, the default of `'w'` is used. */ writeFileSync(path: PathLike, data: NjsStringOrBuffer, options?: WriteFileOptions): void; /** * Synchronously writes `buffer` data to a file. * * @since 0.7.7 * @param fd A file descriptor. * @param buffer A buffer that will be filled with the file data read. * @param offset The location in the buffer at which to start filling. * @param length The number of bytes to read. * @param position The location where to begin reading data from the file. * If null, data will be read from the current file position, and the position will be updated. * If position is an integer, the current file position will remain unchanged. * @param encoding One of the `'utf8'`, `'hex'`, `'base64'`, or `'base64url'`. * Defaults to 'utf8'. */ writeSync(fd: number, buffer: NjsBuffer, offset: number, length?: number, position?: number | null): number; writeSync(fd: number, string: string, position?: number | null, encoding?: FileEncoding): number; } const fs: NjsFS; // It's exported like this because njs doesn't support named imports. // TODO: Replace NjsFS with individual named exports as soon as njs supports named imports. export default fs; }