UNPKG

176 kBTypeScriptView Raw
1/**
2 * The `fs` module enables interacting with the file system in a
3 * way modeled on standard POSIX functions.
4 *
5 * To use the promise-based APIs:
6 *
7 * ```js
8 * import * as fs from 'fs/promises';
9 * ```
10 *
11 * To use the callback and sync APIs:
12 *
13 * ```js
14 * import * as fs from 'fs';
15 * ```
16 *
17 * All file system operations have synchronous, callback, and promise-based
18 * forms, and are accessible using both CommonJS syntax and ES6 Modules (ESM).
19 * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/fs.js)
20 */
21declare module 'fs' {
22 import * as stream from 'node:stream';
23 import { Abortable, EventEmitter } from 'node:events';
24 import { URL } from 'node:url';
25 import * as promises from 'node:fs/promises';
26 export { promises };
27 /**
28 * Valid types for path values in "fs".
29 */
30 export type PathLike = string | Buffer | URL;
31 export type PathOrFileDescriptor = PathLike | number;
32 export type TimeLike = string | number | Date;
33 export type NoParamCallback = (err: NodeJS.ErrnoException | null) => void;
34 export type BufferEncodingOption =
35 | 'buffer'
36 | {
37 encoding: 'buffer';
38 };
39 export interface ObjectEncodingOptions {
40 encoding?: BufferEncoding | null | undefined;
41 }
42 export type EncodingOption = ObjectEncodingOptions | BufferEncoding | undefined | null;
43 export type OpenMode = number | string;
44 export type Mode = number | string;
45 export interface StatsBase<T> {
46 isFile(): boolean;
47 isDirectory(): boolean;
48 isBlockDevice(): boolean;
49 isCharacterDevice(): boolean;
50 isSymbolicLink(): boolean;
51 isFIFO(): boolean;
52 isSocket(): boolean;
53 dev: T;
54 ino: T;
55 mode: T;
56 nlink: T;
57 uid: T;
58 gid: T;
59 rdev: T;
60 size: T;
61 blksize: T;
62 blocks: T;
63 atimeMs: T;
64 mtimeMs: T;
65 ctimeMs: T;
66 birthtimeMs: T;
67 atime: Date;
68 mtime: Date;
69 ctime: Date;
70 birthtime: Date;
71 }
72 export interface Stats extends StatsBase<number> {}
73 /**
74 * A `fs.Stats` object provides information about a file.
75 *
76 * Objects returned from {@link stat}, {@link lstat} and {@link fstat} and
77 * their synchronous counterparts are of this type.
78 * If `bigint` in the `options` passed to those methods is true, the numeric values
79 * will be `bigint` instead of `number`, and the object will contain additional
80 * nanosecond-precision properties suffixed with `Ns`.
81 *
82 * ```console
83 * Stats {
84 * dev: 2114,
85 * ino: 48064969,
86 * mode: 33188,
87 * nlink: 1,
88 * uid: 85,
89 * gid: 100,
90 * rdev: 0,
91 * size: 527,
92 * blksize: 4096,
93 * blocks: 8,
94 * atimeMs: 1318289051000.1,
95 * mtimeMs: 1318289051000.1,
96 * ctimeMs: 1318289051000.1,
97 * birthtimeMs: 1318289051000.1,
98 * atime: Mon, 10 Oct 2011 23:24:11 GMT,
99 * mtime: Mon, 10 Oct 2011 23:24:11 GMT,
100 * ctime: Mon, 10 Oct 2011 23:24:11 GMT,
101 * birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
102 * ```
103 *
104 * `bigint` version:
105 *
106 * ```console
107 * BigIntStats {
108 * dev: 2114n,
109 * ino: 48064969n,
110 * mode: 33188n,
111 * nlink: 1n,
112 * uid: 85n,
113 * gid: 100n,
114 * rdev: 0n,
115 * size: 527n,
116 * blksize: 4096n,
117 * blocks: 8n,
118 * atimeMs: 1318289051000n,
119 * mtimeMs: 1318289051000n,
120 * ctimeMs: 1318289051000n,
121 * birthtimeMs: 1318289051000n,
122 * atimeNs: 1318289051000000000n,
123 * mtimeNs: 1318289051000000000n,
124 * ctimeNs: 1318289051000000000n,
125 * birthtimeNs: 1318289051000000000n,
126 * atime: Mon, 10 Oct 2011 23:24:11 GMT,
127 * mtime: Mon, 10 Oct 2011 23:24:11 GMT,
128 * ctime: Mon, 10 Oct 2011 23:24:11 GMT,
129 * birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
130 * ```
131 * @since v0.1.21
132 */
133 export class Stats {}
134 /**
135 * A representation of a directory entry, which can be a file or a subdirectory
136 * within the directory, as returned by reading from an `fs.Dir`. The
137 * directory entry is a combination of the file name and file type pairs.
138 *
139 * Additionally, when {@link readdir} or {@link readdirSync} is called with
140 * the `withFileTypes` option set to `true`, the resulting array is filled with `fs.Dirent` objects, rather than strings or `Buffer` s.
141 * @since v10.10.0
142 */
143 export class Dirent {
144 /**
145 * Returns `true` if the `fs.Dirent` object describes a regular file.
146 * @since v10.10.0
147 */
148 isFile(): boolean;
149 /**
150 * Returns `true` if the `fs.Dirent` object describes a file system
151 * directory.
152 * @since v10.10.0
153 */
154 isDirectory(): boolean;
155 /**
156 * Returns `true` if the `fs.Dirent` object describes a block device.
157 * @since v10.10.0
158 */
159 isBlockDevice(): boolean;
160 /**
161 * Returns `true` if the `fs.Dirent` object describes a character device.
162 * @since v10.10.0
163 */
164 isCharacterDevice(): boolean;
165 /**
166 * Returns `true` if the `fs.Dirent` object describes a symbolic link.
167 * @since v10.10.0
168 */
169 isSymbolicLink(): boolean;
170 /**
171 * Returns `true` if the `fs.Dirent` object describes a first-in-first-out
172 * (FIFO) pipe.
173 * @since v10.10.0
174 */
175 isFIFO(): boolean;
176 /**
177 * Returns `true` if the `fs.Dirent` object describes a socket.
178 * @since v10.10.0
179 */
180 isSocket(): boolean;
181 /**
182 * The file name that this `fs.Dirent` object refers to. The type of this
183 * value is determined by the `options.encoding` passed to {@link readdir} or {@link readdirSync}.
184 * @since v10.10.0
185 */
186 name: string;
187 }
188 /**
189 * A class representing a directory stream.
190 *
191 * Created by {@link opendir}, {@link opendirSync}, or `fsPromises.opendir()`.
192 *
193 * ```js
194 * import { opendir } from 'fs/promises';
195 *
196 * try {
197 * const dir = await opendir('./');
198 * for await (const dirent of dir)
199 * console.log(dirent.name);
200 * } catch (err) {
201 * console.error(err);
202 * }
203 * ```
204 *
205 * When using the async iterator, the `fs.Dir` object will be automatically
206 * closed after the iterator exits.
207 * @since v12.12.0
208 */
209 export class Dir implements AsyncIterable<Dirent> {
210 /**
211 * The read-only path of this directory as was provided to {@link opendir},{@link opendirSync}, or `fsPromises.opendir()`.
212 * @since v12.12.0
213 */
214 readonly path: string;
215 /**
216 * Asynchronously iterates over the directory via `readdir(3)` until all entries have been read.
217 */
218 [Symbol.asyncIterator](): AsyncIterableIterator<Dirent>;
219 /**
220 * Asynchronously close the directory's underlying resource handle.
221 * Subsequent reads will result in errors.
222 *
223 * A promise is returned that will be resolved after the resource has been
224 * closed.
225 * @since v12.12.0
226 */
227 close(): Promise<void>;
228 close(cb: NoParamCallback): void;
229 /**
230 * Synchronously close the directory's underlying resource handle.
231 * Subsequent reads will result in errors.
232 * @since v12.12.0
233 */
234 closeSync(): void;
235 /**
236 * Asynchronously read the next directory entry via [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) as an `fs.Dirent`.
237 *
238 * A promise is returned that will be resolved with an `fs.Dirent`, or `null`if there are no more directory entries to read.
239 *
240 * Directory entries returned by this function are in no particular order as
241 * provided by the operating system's underlying directory mechanisms.
242 * Entries added or removed while iterating over the directory might not be
243 * included in the iteration results.
244 * @since v12.12.0
245 * @return containing {fs.Dirent|null}
246 */
247 read(): Promise<Dirent | null>;
248 read(cb: (err: NodeJS.ErrnoException | null, dirEnt: Dirent | null) => void): void;
249 /**
250 * Synchronously read the next directory entry as an `fs.Dirent`. See the
251 * POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more detail.
252 *
253 * If there are no more directory entries to read, `null` will be returned.
254 *
255 * Directory entries returned by this function are in no particular order as
256 * provided by the operating system's underlying directory mechanisms.
257 * Entries added or removed while iterating over the directory might not be
258 * included in the iteration results.
259 * @since v12.12.0
260 */
261 readSync(): Dirent | null;
262 }
263 /**
264 * Class: fs.StatWatcher
265 * @since v14.3.0, v12.20.0
266 * Extends `EventEmitter`
267 * A successful call to {@link watchFile} method will return a new fs.StatWatcher object.
268 */
269 export interface StatWatcher extends EventEmitter {
270 /**
271 * When called, requests that the Node.js event loop _not_ exit so long as the `fs.StatWatcher` is active. Calling `watcher.ref()` multiple times will have
272 * no effect.
273 *
274 * By default, all `fs.StatWatcher` objects are "ref'ed", making it normally
275 * unnecessary to call `watcher.ref()` unless `watcher.unref()` had been
276 * called previously.
277 * @since v14.3.0, v12.20.0
278 */
279 ref(): this;
280 /**
281 * When called, the active `fs.StatWatcher` object will not require the Node.js
282 * event loop to remain active. If there is no other activity keeping the
283 * event loop running, the process may exit before the `fs.StatWatcher` object's
284 * callback is invoked. Calling `watcher.unref()` multiple times will have
285 * no effect.
286 * @since v14.3.0, v12.20.0
287 */
288 unref(): this;
289 }
290 export interface FSWatcher extends EventEmitter {
291 /**
292 * Stop watching for changes on the given `fs.FSWatcher`. Once stopped, the `fs.FSWatcher` object is no longer usable.
293 * @since v0.5.8
294 */
295 close(): void;
296 /**
297 * events.EventEmitter
298 * 1. change
299 * 2. error
300 */
301 addListener(event: string, listener: (...args: any[]) => void): this;
302 addListener(event: 'change', listener: (eventType: string, filename: string | Buffer) => void): this;
303 addListener(event: 'error', listener: (error: Error) => void): this;
304 addListener(event: 'close', listener: () => void): this;
305 on(event: string, listener: (...args: any[]) => void): this;
306 on(event: 'change', listener: (eventType: string, filename: string | Buffer) => void): this;
307 on(event: 'error', listener: (error: Error) => void): this;
308 on(event: 'close', listener: () => void): this;
309 once(event: string, listener: (...args: any[]) => void): this;
310 once(event: 'change', listener: (eventType: string, filename: string | Buffer) => void): this;
311 once(event: 'error', listener: (error: Error) => void): this;
312 once(event: 'close', listener: () => void): this;
313 prependListener(event: string, listener: (...args: any[]) => void): this;
314 prependListener(event: 'change', listener: (eventType: string, filename: string | Buffer) => void): this;
315 prependListener(event: 'error', listener: (error: Error) => void): this;
316 prependListener(event: 'close', listener: () => void): this;
317 prependOnceListener(event: string, listener: (...args: any[]) => void): this;
318 prependOnceListener(event: 'change', listener: (eventType: string, filename: string | Buffer) => void): this;
319 prependOnceListener(event: 'error', listener: (error: Error) => void): this;
320 prependOnceListener(event: 'close', listener: () => void): this;
321 }
322 /**
323 * Instances of `fs.ReadStream` are created and returned using the {@link createReadStream} function.
324 * @since v0.1.93
325 */
326 export class ReadStream extends stream.Readable {
327 close(callback?: (err?: NodeJS.ErrnoException | null) => void): void;
328 /**
329 * The number of bytes that have been read so far.
330 * @since v6.4.0
331 */
332 bytesRead: number;
333 /**
334 * The path to the file the stream is reading from as specified in the first
335 * argument to `fs.createReadStream()`. If `path` is passed as a string, then`readStream.path` will be a string. If `path` is passed as a `Buffer`, then`readStream.path` will be a
336 * `Buffer`. If `fd` is specified, then`readStream.path` will be `undefined`.
337 * @since v0.1.93
338 */
339 path: string | Buffer;
340 /**
341 * This property is `true` if the underlying file has not been opened yet,
342 * i.e. before the `'ready'` event is emitted.
343 * @since v11.2.0, v10.16.0
344 */
345 pending: boolean;
346 /**
347 * events.EventEmitter
348 * 1. open
349 * 2. close
350 * 3. ready
351 */
352 addListener(event: 'close', listener: () => void): this;
353 addListener(event: 'data', listener: (chunk: Buffer | string) => void): this;
354 addListener(event: 'end', listener: () => void): this;
355 addListener(event: 'error', listener: (err: Error) => void): this;
356 addListener(event: 'open', listener: (fd: number) => void): this;
357 addListener(event: 'pause', listener: () => void): this;
358 addListener(event: 'readable', listener: () => void): this;
359 addListener(event: 'ready', listener: () => void): this;
360 addListener(event: 'resume', listener: () => void): this;
361 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
362 on(event: 'close', listener: () => void): this;
363 on(event: 'data', listener: (chunk: Buffer | string) => void): this;
364 on(event: 'end', listener: () => void): this;
365 on(event: 'error', listener: (err: Error) => void): this;
366 on(event: 'open', listener: (fd: number) => void): this;
367 on(event: 'pause', listener: () => void): this;
368 on(event: 'readable', listener: () => void): this;
369 on(event: 'ready', listener: () => void): this;
370 on(event: 'resume', listener: () => void): this;
371 on(event: string | symbol, listener: (...args: any[]) => void): this;
372 once(event: 'close', listener: () => void): this;
373 once(event: 'data', listener: (chunk: Buffer | string) => void): this;
374 once(event: 'end', listener: () => void): this;
375 once(event: 'error', listener: (err: Error) => void): this;
376 once(event: 'open', listener: (fd: number) => void): this;
377 once(event: 'pause', listener: () => void): this;
378 once(event: 'readable', listener: () => void): this;
379 once(event: 'ready', listener: () => void): this;
380 once(event: 'resume', listener: () => void): this;
381 once(event: string | symbol, listener: (...args: any[]) => void): this;
382 prependListener(event: 'close', listener: () => void): this;
383 prependListener(event: 'data', listener: (chunk: Buffer | string) => void): this;
384 prependListener(event: 'end', listener: () => void): this;
385 prependListener(event: 'error', listener: (err: Error) => void): this;
386 prependListener(event: 'open', listener: (fd: number) => void): this;
387 prependListener(event: 'pause', listener: () => void): this;
388 prependListener(event: 'readable', listener: () => void): this;
389 prependListener(event: 'ready', listener: () => void): this;
390 prependListener(event: 'resume', listener: () => void): this;
391 prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
392 prependOnceListener(event: 'close', listener: () => void): this;
393 prependOnceListener(event: 'data', listener: (chunk: Buffer | string) => void): this;
394 prependOnceListener(event: 'end', listener: () => void): this;
395 prependOnceListener(event: 'error', listener: (err: Error) => void): this;
396 prependOnceListener(event: 'open', listener: (fd: number) => void): this;
397 prependOnceListener(event: 'pause', listener: () => void): this;
398 prependOnceListener(event: 'readable', listener: () => void): this;
399 prependOnceListener(event: 'ready', listener: () => void): this;
400 prependOnceListener(event: 'resume', listener: () => void): this;
401 prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
402 }
403 /**
404 * * Extends `stream.Writable`
405 *
406 * Instances of `fs.WriteStream` are created and returned using the {@link createWriteStream} function.
407 * @since v0.1.93
408 */
409 export class WriteStream extends stream.Writable {
410 /**
411 * Closes `writeStream`. Optionally accepts a
412 * callback that will be executed once the `writeStream`is closed.
413 * @since v0.9.4
414 */
415 close(callback?: (err?: NodeJS.ErrnoException | null) => void): void;
416 /**
417 * The number of bytes written so far. Does not include data that is still queued
418 * for writing.
419 * @since v0.4.7
420 */
421 bytesWritten: number;
422 /**
423 * The path to the file the stream is writing to as specified in the first
424 * argument to {@link createWriteStream}. If `path` is passed as a string, then`writeStream.path` will be a string. If `path` is passed as a `Buffer`, then`writeStream.path` will be a
425 * `Buffer`.
426 * @since v0.1.93
427 */
428 path: string | Buffer;
429 /**
430 * This property is `true` if the underlying file has not been opened yet,
431 * i.e. before the `'ready'` event is emitted.
432 * @since v11.2.0
433 */
434 pending: boolean;
435 /**
436 * events.EventEmitter
437 * 1. open
438 * 2. close
439 * 3. ready
440 */
441 addListener(event: 'close', listener: () => void): this;
442 addListener(event: 'drain', listener: () => void): this;
443 addListener(event: 'error', listener: (err: Error) => void): this;
444 addListener(event: 'finish', listener: () => void): this;
445 addListener(event: 'open', listener: (fd: number) => void): this;
446 addListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
447 addListener(event: 'ready', listener: () => void): this;
448 addListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
449 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
450 on(event: 'close', listener: () => void): this;
451 on(event: 'drain', listener: () => void): this;
452 on(event: 'error', listener: (err: Error) => void): this;
453 on(event: 'finish', listener: () => void): this;
454 on(event: 'open', listener: (fd: number) => void): this;
455 on(event: 'pipe', listener: (src: stream.Readable) => void): this;
456 on(event: 'ready', listener: () => void): this;
457 on(event: 'unpipe', listener: (src: stream.Readable) => void): this;
458 on(event: string | symbol, listener: (...args: any[]) => void): this;
459 once(event: 'close', listener: () => void): this;
460 once(event: 'drain', listener: () => void): this;
461 once(event: 'error', listener: (err: Error) => void): this;
462 once(event: 'finish', listener: () => void): this;
463 once(event: 'open', listener: (fd: number) => void): this;
464 once(event: 'pipe', listener: (src: stream.Readable) => void): this;
465 once(event: 'ready', listener: () => void): this;
466 once(event: 'unpipe', listener: (src: stream.Readable) => void): this;
467 once(event: string | symbol, listener: (...args: any[]) => void): this;
468 prependListener(event: 'close', listener: () => void): this;
469 prependListener(event: 'drain', listener: () => void): this;
470 prependListener(event: 'error', listener: (err: Error) => void): this;
471 prependListener(event: 'finish', listener: () => void): this;
472 prependListener(event: 'open', listener: (fd: number) => void): this;
473 prependListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
474 prependListener(event: 'ready', listener: () => void): this;
475 prependListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
476 prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
477 prependOnceListener(event: 'close', listener: () => void): this;
478 prependOnceListener(event: 'drain', listener: () => void): this;
479 prependOnceListener(event: 'error', listener: (err: Error) => void): this;
480 prependOnceListener(event: 'finish', listener: () => void): this;
481 prependOnceListener(event: 'open', listener: (fd: number) => void): this;
482 prependOnceListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
483 prependOnceListener(event: 'ready', listener: () => void): this;
484 prependOnceListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
485 prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
486 }
487 /**
488 * Asynchronously rename file at `oldPath` to the pathname provided
489 * as `newPath`. In the case that `newPath` already exists, it will
490 * be overwritten. If there is a directory at `newPath`, an error will
491 * be raised instead. No arguments other than a possible exception are
492 * given to the completion callback.
493 *
494 * See also: [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html).
495 *
496 * ```js
497 * import { rename } from 'fs';
498 *
499 * rename('oldFile.txt', 'newFile.txt', (err) => {
500 * if (err) throw err;
501 * console.log('Rename complete!');
502 * });
503 * ```
504 * @since v0.0.2
505 */
506 export function rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void;
507 export namespace rename {
508 /**
509 * Asynchronous rename(2) - Change the name or location of a file or directory.
510 * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol.
511 * URL support is _experimental_.
512 * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
513 * URL support is _experimental_.
514 */
515 function __promisify__(oldPath: PathLike, newPath: PathLike): Promise<void>;
516 }
517 /**
518 * Renames the file from `oldPath` to `newPath`. Returns `undefined`.
519 *
520 * See the POSIX [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html) documentation for more details.
521 * @since v0.1.21
522 */
523 export function renameSync(oldPath: PathLike, newPath: PathLike): void;
524 /**
525 * Truncates the file. No arguments other than a possible exception are
526 * given to the completion callback. A file descriptor can also be passed as the
527 * first argument. In this case, `fs.ftruncate()` is called.
528 *
529 * ```js
530 * import { truncate } from 'fs';
531 * // Assuming that 'path/file.txt' is a regular file.
532 * truncate('path/file.txt', (err) => {
533 * if (err) throw err;
534 * console.log('path/file.txt was truncated');
535 * });
536 * ```
537 *
538 * Passing a file descriptor is deprecated and may result in an error being thrown
539 * in the future.
540 *
541 * See the POSIX [`truncate(2)`](http://man7.org/linux/man-pages/man2/truncate.2.html) documentation for more details.
542 * @since v0.8.6
543 * @param [len=0]
544 */
545 export function truncate(path: PathLike, len: number | undefined | null, callback: NoParamCallback): void;
546 /**
547 * Asynchronous truncate(2) - Truncate a file to a specified length.
548 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
549 */
550 export function truncate(path: PathLike, callback: NoParamCallback): void;
551 export namespace truncate {
552 /**
553 * Asynchronous truncate(2) - Truncate a file to a specified length.
554 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
555 * @param len If not specified, defaults to `0`.
556 */
557 function __promisify__(path: PathLike, len?: number | null): Promise<void>;
558 }
559 /**
560 * Truncates the file. Returns `undefined`. A file descriptor can also be
561 * passed as the first argument. In this case, `fs.ftruncateSync()` is called.
562 *
563 * Passing a file descriptor is deprecated and may result in an error being thrown
564 * in the future.
565 * @since v0.8.6
566 * @param [len=0]
567 */
568 export function truncateSync(path: PathLike, len?: number | null): void;
569 /**
570 * Truncates the file descriptor. No arguments other than a possible exception are
571 * given to the completion callback.
572 *
573 * See the POSIX [`ftruncate(2)`](http://man7.org/linux/man-pages/man2/ftruncate.2.html) documentation for more detail.
574 *
575 * If the file referred to by the file descriptor was larger than `len` bytes, only
576 * the first `len` bytes will be retained in the file.
577 *
578 * For example, the following program retains only the first four bytes of the
579 * file:
580 *
581 * ```js
582 * import { open, close, ftruncate } from 'fs';
583 *
584 * function closeFd(fd) {
585 * close(fd, (err) => {
586 * if (err) throw err;
587 * });
588 * }
589 *
590 * open('temp.txt', 'r+', (err, fd) => {
591 * if (err) throw err;
592 *
593 * try {
594 * ftruncate(fd, 4, (err) => {
595 * closeFd(fd);
596 * if (err) throw err;
597 * });
598 * } catch (err) {
599 * closeFd(fd);
600 * if (err) throw err;
601 * }
602 * });
603 * ```
604 *
605 * If the file previously was shorter than `len` bytes, it is extended, and the
606 * extended part is filled with null bytes (`'\0'`):
607 *
608 * If `len` is negative then `0` will be used.
609 * @since v0.8.6
610 * @param [len=0]
611 */
612 export function ftruncate(fd: number, len: number | undefined | null, callback: NoParamCallback): void;
613 /**
614 * Asynchronous ftruncate(2) - Truncate a file to a specified length.
615 * @param fd A file descriptor.
616 */
617 export function ftruncate(fd: number, callback: NoParamCallback): void;
618 export namespace ftruncate {
619 /**
620 * Asynchronous ftruncate(2) - Truncate a file to a specified length.
621 * @param fd A file descriptor.
622 * @param len If not specified, defaults to `0`.
623 */
624 function __promisify__(fd: number, len?: number | null): Promise<void>;
625 }
626 /**
627 * Truncates the file descriptor. Returns `undefined`.
628 *
629 * For detailed information, see the documentation of the asynchronous version of
630 * this API: {@link ftruncate}.
631 * @since v0.8.6
632 * @param [len=0]
633 */
634 export function ftruncateSync(fd: number, len?: number | null): void;
635 /**
636 * Asynchronously changes owner and group of a file. No arguments other than a
637 * possible exception are given to the completion callback.
638 *
639 * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail.
640 * @since v0.1.97
641 */
642 export function chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void;
643 export namespace chown {
644 /**
645 * Asynchronous chown(2) - Change ownership of a file.
646 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
647 */
648 function __promisify__(path: PathLike, uid: number, gid: number): Promise<void>;
649 }
650 /**
651 * Synchronously changes owner and group of a file. Returns `undefined`.
652 * This is the synchronous version of {@link chown}.
653 *
654 * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail.
655 * @since v0.1.97
656 */
657 export function chownSync(path: PathLike, uid: number, gid: number): void;
658 /**
659 * Sets the owner of the file. No arguments other than a possible exception are
660 * given to the completion callback.
661 *
662 * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail.
663 * @since v0.4.7
664 */
665 export function fchown(fd: number, uid: number, gid: number, callback: NoParamCallback): void;
666 export namespace fchown {
667 /**
668 * Asynchronous fchown(2) - Change ownership of a file.
669 * @param fd A file descriptor.
670 */
671 function __promisify__(fd: number, uid: number, gid: number): Promise<void>;
672 }
673 /**
674 * Sets the owner of the file. Returns `undefined`.
675 *
676 * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail.
677 * @since v0.4.7
678 * @param uid The file's new owner's user id.
679 * @param gid The file's new group's group id.
680 */
681 export function fchownSync(fd: number, uid: number, gid: number): void;
682 /**
683 * Set the owner of the symbolic link. No arguments other than a possible
684 * exception are given to the completion callback.
685 *
686 * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more detail.
687 */
688 export function lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void;
689 export namespace lchown {
690 /**
691 * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links.
692 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
693 */
694 function __promisify__(path: PathLike, uid: number, gid: number): Promise<void>;
695 }
696 /**
697 * Set the owner for the path. Returns `undefined`.
698 *
699 * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more details.
700 * @param uid The file's new owner's user id.
701 * @param gid The file's new group's group id.
702 */
703 export function lchownSync(path: PathLike, uid: number, gid: number): void;
704 /**
705 * Changes the access and modification times of a file in the same way as {@link utimes}, with the difference that if the path refers to a symbolic
706 * link, then the link is not dereferenced: instead, the timestamps of the
707 * symbolic link itself are changed.
708 *
709 * No arguments other than a possible exception are given to the completion
710 * callback.
711 * @since v14.5.0, v12.19.0
712 */
713 export function lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void;
714 export namespace lutimes {
715 /**
716 * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`,
717 * with the difference that if the path refers to a symbolic link, then the link is not
718 * dereferenced: instead, the timestamps of the symbolic link itself are changed.
719 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
720 * @param atime The last access time. If a string is provided, it will be coerced to number.
721 * @param mtime The last modified time. If a string is provided, it will be coerced to number.
722 */
723 function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void>;
724 }
725 /**
726 * Change the file system timestamps of the symbolic link referenced by `path`.
727 * Returns `undefined`, or throws an exception when parameters are incorrect or
728 * the operation fails. This is the synchronous version of {@link lutimes}.
729 * @since v14.5.0, v12.19.0
730 */
731 export function lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void;
732 /**
733 * Asynchronously changes the permissions of a file. No arguments other than a
734 * possible exception are given to the completion callback.
735 *
736 * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail.
737 *
738 * ```js
739 * import { chmod } from 'fs';
740 *
741 * chmod('my_file.txt', 0o775, (err) => {
742 * if (err) throw err;
743 * console.log('The permissions for file "my_file.txt" have been changed!');
744 * });
745 * ```
746 * @since v0.1.30
747 */
748 export function chmod(path: PathLike, mode: Mode, callback: NoParamCallback): void;
749 export namespace chmod {
750 /**
751 * Asynchronous chmod(2) - Change permissions of a file.
752 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
753 * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
754 */
755 function __promisify__(path: PathLike, mode: Mode): Promise<void>;
756 }
757 /**
758 * For detailed information, see the documentation of the asynchronous version of
759 * this API: {@link chmod}.
760 *
761 * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail.
762 * @since v0.6.7
763 */
764 export function chmodSync(path: PathLike, mode: Mode): void;
765 /**
766 * Sets the permissions on the file. No arguments other than a possible exception
767 * are given to the completion callback.
768 *
769 * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail.
770 * @since v0.4.7
771 */
772 export function fchmod(fd: number, mode: Mode, callback: NoParamCallback): void;
773 export namespace fchmod {
774 /**
775 * Asynchronous fchmod(2) - Change permissions of a file.
776 * @param fd A file descriptor.
777 * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
778 */
779 function __promisify__(fd: number, mode: Mode): Promise<void>;
780 }
781 /**
782 * Sets the permissions on the file. Returns `undefined`.
783 *
784 * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail.
785 * @since v0.4.7
786 */
787 export function fchmodSync(fd: number, mode: Mode): void;
788 /**
789 * Changes the permissions on a symbolic link. No arguments other than a possible
790 * exception are given to the completion callback.
791 *
792 * This method is only implemented on macOS.
793 *
794 * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail.
795 * @deprecated Since v0.4.7
796 */
797 export function lchmod(path: PathLike, mode: Mode, callback: NoParamCallback): void;
798 /** @deprecated */
799 export namespace lchmod {
800 /**
801 * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links.
802 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
803 * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
804 */
805 function __promisify__(path: PathLike, mode: Mode): Promise<void>;
806 }
807 /**
808 * Changes the permissions on a symbolic link. Returns `undefined`.
809 *
810 * This method is only implemented on macOS.
811 *
812 * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail.
813 * @deprecated Since v0.4.7
814 */
815 export function lchmodSync(path: PathLike, mode: Mode): void;
816 /**
817 * Asynchronous [`stat(2)`](http://man7.org/linux/man-pages/man2/stat.2.html). The callback gets two arguments `(err, stats)` where`stats` is an `fs.Stats` object.
818 *
819 * In case of an error, the `err.code` will be one of `Common System Errors`.
820 *
821 * Using `fs.stat()` to check for the existence of a file before calling`fs.open()`, `fs.readFile()` or `fs.writeFile()` is not recommended.
822 * Instead, user code should open/read/write the file directly and handle the
823 * error raised if the file is not available.
824 *
825 * To check if a file exists without manipulating it afterwards, {@link access} is recommended.
826 *
827 * For example, given the following directory structure:
828 *
829 * ```text
830 * - txtDir
831 * -- file.txt
832 * - app.js
833 * ```
834 *
835 * The next program will check for the stats of the given paths:
836 *
837 * ```js
838 * import { stat } from 'fs';
839 *
840 * const pathsToCheck = ['./txtDir', './txtDir/file.txt'];
841 *
842 * for (let i = 0; i < pathsToCheck.length; i++) {
843 * stat(pathsToCheck[i], (err, stats) => {
844 * console.log(stats.isDirectory());
845 * console.log(stats);
846 * });
847 * }
848 * ```
849 *
850 * The resulting output will resemble:
851 *
852 * ```console
853 * true
854 * Stats {
855 * dev: 16777220,
856 * mode: 16877,
857 * nlink: 3,
858 * uid: 501,
859 * gid: 20,
860 * rdev: 0,
861 * blksize: 4096,
862 * ino: 14214262,
863 * size: 96,
864 * blocks: 0,
865 * atimeMs: 1561174653071.963,
866 * mtimeMs: 1561174614583.3518,
867 * ctimeMs: 1561174626623.5366,
868 * birthtimeMs: 1561174126937.2893,
869 * atime: 2019-06-22T03:37:33.072Z,
870 * mtime: 2019-06-22T03:36:54.583Z,
871 * ctime: 2019-06-22T03:37:06.624Z,
872 * birthtime: 2019-06-22T03:28:46.937Z
873 * }
874 * false
875 * Stats {
876 * dev: 16777220,
877 * mode: 33188,
878 * nlink: 1,
879 * uid: 501,
880 * gid: 20,
881 * rdev: 0,
882 * blksize: 4096,
883 * ino: 14214074,
884 * size: 8,
885 * blocks: 8,
886 * atimeMs: 1561174616618.8555,
887 * mtimeMs: 1561174614584,
888 * ctimeMs: 1561174614583.8145,
889 * birthtimeMs: 1561174007710.7478,
890 * atime: 2019-06-22T03:36:56.619Z,
891 * mtime: 2019-06-22T03:36:54.584Z,
892 * ctime: 2019-06-22T03:36:54.584Z,
893 * birthtime: 2019-06-22T03:26:47.711Z
894 * }
895 * ```
896 * @since v0.0.2
897 */
898 export function stat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
899 export function stat(
900 path: PathLike,
901 options:
902 | (StatOptions & {
903 bigint?: false | undefined;
904 })
905 | undefined,
906 callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void
907 ): void;
908 export function stat(
909 path: PathLike,
910 options: StatOptions & {
911 bigint: true;
912 },
913 callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void
914 ): void;
915 export function stat(path: PathLike, options: StatOptions | undefined, callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void): void;
916 export namespace stat {
917 /**
918 * Asynchronous stat(2) - Get file status.
919 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
920 */
921 function __promisify__(
922 path: PathLike,
923 options?: StatOptions & {
924 bigint?: false | undefined;
925 }
926 ): Promise<Stats>;
927 function __promisify__(
928 path: PathLike,
929 options: StatOptions & {
930 bigint: true;
931 }
932 ): Promise<BigIntStats>;
933 function __promisify__(path: PathLike, options?: StatOptions): Promise<Stats | BigIntStats>;
934 }
935 export interface StatSyncFn extends Function {
936 (path: PathLike, options?: undefined): Stats;
937 (
938 path: PathLike,
939 options?: StatSyncOptions & {
940 bigint?: false | undefined;
941 throwIfNoEntry: false;
942 }
943 ): Stats | undefined;
944 (
945 path: PathLike,
946 options: StatSyncOptions & {
947 bigint: true;
948 throwIfNoEntry: false;
949 }
950 ): BigIntStats | undefined;
951 (
952 path: PathLike,
953 options?: StatSyncOptions & {
954 bigint?: false | undefined;
955 }
956 ): Stats;
957 (
958 path: PathLike,
959 options: StatSyncOptions & {
960 bigint: true;
961 }
962 ): BigIntStats;
963 (
964 path: PathLike,
965 options: StatSyncOptions & {
966 bigint: boolean;
967 throwIfNoEntry?: false | undefined;
968 }
969 ): Stats | BigIntStats;
970 (path: PathLike, options?: StatSyncOptions): Stats | BigIntStats | undefined;
971 }
972 /**
973 * Synchronous stat(2) - Get file status.
974 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
975 */
976 export const statSync: StatSyncFn;
977 /**
978 * Invokes the callback with the `fs.Stats` for the file descriptor.
979 *
980 * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail.
981 * @since v0.1.95
982 */
983 export function fstat(fd: number, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
984 export function fstat(
985 fd: number,
986 options:
987 | (StatOptions & {
988 bigint?: false | undefined;
989 })
990 | undefined,
991 callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void
992 ): void;
993 export function fstat(
994 fd: number,
995 options: StatOptions & {
996 bigint: true;
997 },
998 callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void
999 ): void;
1000 export function fstat(fd: number, options: StatOptions | undefined, callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void): void;
1001 export namespace fstat {
1002 /**
1003 * Asynchronous fstat(2) - Get file status.
1004 * @param fd A file descriptor.
1005 */
1006 function __promisify__(
1007 fd: number,
1008 options?: StatOptions & {
1009 bigint?: false | undefined;
1010 }
1011 ): Promise<Stats>;
1012 function __promisify__(
1013 fd: number,
1014 options: StatOptions & {
1015 bigint: true;
1016 }
1017 ): Promise<BigIntStats>;
1018 function __promisify__(fd: number, options?: StatOptions): Promise<Stats | BigIntStats>;
1019 }
1020 /**
1021 * Retrieves the `fs.Stats` for the file descriptor.
1022 *
1023 * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail.
1024 * @since v0.1.95
1025 */
1026 export function fstatSync(
1027 fd: number,
1028 options?: StatOptions & {
1029 bigint?: false | undefined;
1030 }
1031 ): Stats;
1032 export function fstatSync(
1033 fd: number,
1034 options: StatOptions & {
1035 bigint: true;
1036 }
1037 ): BigIntStats;
1038 export function fstatSync(fd: number, options?: StatOptions): Stats | BigIntStats;
1039 /**
1040 * Retrieves the `fs.Stats` for the symbolic link referred to by the path.
1041 * The callback gets two arguments `(err, stats)` where `stats` is a `fs.Stats` object. `lstat()` is identical to `stat()`, except that if `path` is a symbolic
1042 * link, then the link itself is stat-ed, not the file that it refers to.
1043 *
1044 * See the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) documentation for more details.
1045 * @since v0.1.30
1046 */
1047 export function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
1048 export function lstat(
1049 path: PathLike,
1050 options:
1051 | (StatOptions & {
1052 bigint?: false | undefined;
1053 })
1054 | undefined,
1055 callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void
1056 ): void;
1057 export function lstat(
1058 path: PathLike,
1059 options: StatOptions & {
1060 bigint: true;
1061 },
1062 callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void
1063 ): void;
1064 export function lstat(path: PathLike, options: StatOptions | undefined, callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void): void;
1065 export namespace lstat {
1066 /**
1067 * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links.
1068 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1069 */
1070 function __promisify__(
1071 path: PathLike,
1072 options?: StatOptions & {
1073 bigint?: false | undefined;
1074 }
1075 ): Promise<Stats>;
1076 function __promisify__(
1077 path: PathLike,
1078 options: StatOptions & {
1079 bigint: true;
1080 }
1081 ): Promise<BigIntStats>;
1082 function __promisify__(path: PathLike, options?: StatOptions): Promise<Stats | BigIntStats>;
1083 }
1084 /**
1085 * Synchronous lstat(2) - Get file status. Does not dereference symbolic links.
1086 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1087 */
1088 export const lstatSync: StatSyncFn;
1089 /**
1090 * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. No arguments other than
1091 * a possible
1092 * exception are given to the completion callback.
1093 * @since v0.1.31
1094 */
1095 export function link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void;
1096 export namespace link {
1097 /**
1098 * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file.
1099 * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol.
1100 * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
1101 */
1102 function __promisify__(existingPath: PathLike, newPath: PathLike): Promise<void>;
1103 }
1104 /**
1105 * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. Returns `undefined`.
1106 * @since v0.1.31
1107 */
1108 export function linkSync(existingPath: PathLike, newPath: PathLike): void;
1109 /**
1110 * Creates the link called `path` pointing to `target`. No arguments other than a
1111 * possible exception are given to the completion callback.
1112 *
1113 * See the POSIX [`symlink(2)`](http://man7.org/linux/man-pages/man2/symlink.2.html) documentation for more details.
1114 *
1115 * The `type` argument is only available on Windows and ignored on other platforms.
1116 * It can be set to `'dir'`, `'file'`, or `'junction'`. If the `type` argument is
1117 * not set, Node.js will autodetect `target` type and use `'file'` or `'dir'`. If
1118 * the `target` does not exist, `'file'` will be used. Windows junction points
1119 * require the destination path to be absolute. When using `'junction'`, the`target` argument will automatically be normalized to absolute path.
1120 *
1121 * Relative targets are relative to the link’s parent directory.
1122 *
1123 * ```js
1124 * import { symlink } from 'fs';
1125 *
1126 * symlink('./mew', './example/mewtwo', callback);
1127 * ```
1128 *
1129 * The above example creates a symbolic link `mewtwo` in the `example` which points
1130 * to `mew` in the same directory:
1131 *
1132 * ```bash
1133 * $ tree example/
1134 * example/
1135 * ├── mew
1136 * └── mewtwo -> ./mew
1137 * ```
1138 * @since v0.1.31
1139 */
1140 export function symlink(target: PathLike, path: PathLike, type: symlink.Type | undefined | null, callback: NoParamCallback): void;
1141 /**
1142 * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
1143 * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
1144 * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
1145 */
1146 export function symlink(target: PathLike, path: PathLike, callback: NoParamCallback): void;
1147 export namespace symlink {
1148 /**
1149 * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
1150 * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
1151 * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
1152 * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms).
1153 * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path.
1154 */
1155 function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise<void>;
1156 type Type = 'dir' | 'file' | 'junction';
1157 }
1158 /**
1159 * Returns `undefined`.
1160 *
1161 * For detailed information, see the documentation of the asynchronous version of
1162 * this API: {@link symlink}.
1163 * @since v0.1.31
1164 */
1165 export function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void;
1166 /**
1167 * Reads the contents of the symbolic link referred to by `path`. The callback gets
1168 * two arguments `(err, linkString)`.
1169 *
1170 * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details.
1171 *
1172 * The optional `options` argument can be a string specifying an encoding, or an
1173 * object with an `encoding` property specifying the character encoding to use for
1174 * the link path passed to the callback. If the `encoding` is set to `'buffer'`,
1175 * the link path returned will be passed as a `Buffer` object.
1176 * @since v0.1.31
1177 */
1178 export function readlink(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, linkString: string) => void): void;
1179 /**
1180 * Asynchronous readlink(2) - read value of a symbolic link.
1181 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1182 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1183 */
1184 export function readlink(path: PathLike, options: BufferEncodingOption, callback: (err: NodeJS.ErrnoException | null, linkString: Buffer) => void): void;
1185 /**
1186 * Asynchronous readlink(2) - read value of a symbolic link.
1187 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1188 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1189 */
1190 export function readlink(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void): void;
1191 /**
1192 * Asynchronous readlink(2) - read value of a symbolic link.
1193 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1194 */
1195 export function readlink(path: PathLike, callback: (err: NodeJS.ErrnoException | null, linkString: string) => void): void;
1196 export namespace readlink {
1197 /**
1198 * Asynchronous readlink(2) - read value of a symbolic link.
1199 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1200 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1201 */
1202 function __promisify__(path: PathLike, options?: EncodingOption): Promise<string>;
1203 /**
1204 * Asynchronous readlink(2) - read value of a symbolic link.
1205 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1206 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1207 */
1208 function __promisify__(path: PathLike, options: BufferEncodingOption): Promise<Buffer>;
1209 /**
1210 * Asynchronous readlink(2) - read value of a symbolic link.
1211 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1212 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1213 */
1214 function __promisify__(path: PathLike, options?: EncodingOption): Promise<string | Buffer>;
1215 }
1216 /**
1217 * Returns the symbolic link's string value.
1218 *
1219 * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details.
1220 *
1221 * The optional `options` argument can be a string specifying an encoding, or an
1222 * object with an `encoding` property specifying the character encoding to use for
1223 * the link path returned. If the `encoding` is set to `'buffer'`,
1224 * the link path returned will be passed as a `Buffer` object.
1225 * @since v0.1.31
1226 */
1227 export function readlinkSync(path: PathLike, options?: EncodingOption): string;
1228 /**
1229 * Synchronous readlink(2) - read value of a symbolic link.
1230 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1231 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1232 */
1233 export function readlinkSync(path: PathLike, options: BufferEncodingOption): Buffer;
1234 /**
1235 * Synchronous readlink(2) - read value of a symbolic link.
1236 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1237 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1238 */
1239 export function readlinkSync(path: PathLike, options?: EncodingOption): string | Buffer;
1240 /**
1241 * Asynchronously computes the canonical pathname by resolving `.`, `..` and
1242 * symbolic links.
1243 *
1244 * A canonical pathname is not necessarily unique. Hard links and bind mounts can
1245 * expose a file system entity through many pathnames.
1246 *
1247 * This function behaves like [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html), with some exceptions:
1248 *
1249 * 1. No case conversion is performed on case-insensitive file systems.
1250 * 2. The maximum number of symbolic links is platform-independent and generally
1251 * (much) higher than what the native [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html) implementation supports.
1252 *
1253 * The `callback` gets two arguments `(err, resolvedPath)`. May use `process.cwd`to resolve relative paths.
1254 *
1255 * Only paths that can be converted to UTF8 strings are supported.
1256 *
1257 * The optional `options` argument can be a string specifying an encoding, or an
1258 * object with an `encoding` property specifying the character encoding to use for
1259 * the path passed to the callback. If the `encoding` is set to `'buffer'`,
1260 * the path returned will be passed as a `Buffer` object.
1261 *
1262 * If `path` resolves to a socket or a pipe, the function will return a system
1263 * dependent name for that object.
1264 * @since v0.1.31
1265 */
1266 export function realpath(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void;
1267 /**
1268 * Asynchronous realpath(3) - return the canonicalized absolute pathname.
1269 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1270 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1271 */
1272 export function realpath(path: PathLike, options: BufferEncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void): void;
1273 /**
1274 * Asynchronous realpath(3) - return the canonicalized absolute pathname.
1275 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1276 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1277 */
1278 export function realpath(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void): void;
1279 /**
1280 * Asynchronous realpath(3) - return the canonicalized absolute pathname.
1281 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1282 */
1283 export function realpath(path: PathLike, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void;
1284 export namespace realpath {
1285 /**
1286 * Asynchronous realpath(3) - return the canonicalized absolute pathname.
1287 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1288 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1289 */
1290 function __promisify__(path: PathLike, options?: EncodingOption): Promise<string>;
1291 /**
1292 * Asynchronous realpath(3) - return the canonicalized absolute pathname.
1293 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1294 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1295 */
1296 function __promisify__(path: PathLike, options: BufferEncodingOption): Promise<Buffer>;
1297 /**
1298 * Asynchronous realpath(3) - return the canonicalized absolute pathname.
1299 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1300 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1301 */
1302 function __promisify__(path: PathLike, options?: EncodingOption): Promise<string | Buffer>;
1303 /**
1304 * Asynchronous [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html).
1305 *
1306 * The `callback` gets two arguments `(err, resolvedPath)`.
1307 *
1308 * Only paths that can be converted to UTF8 strings are supported.
1309 *
1310 * The optional `options` argument can be a string specifying an encoding, or an
1311 * object with an `encoding` property specifying the character encoding to use for
1312 * the path passed to the callback. If the `encoding` is set to `'buffer'`,
1313 * the path returned will be passed as a `Buffer` object.
1314 *
1315 * On Linux, when Node.js is linked against musl libc, the procfs file system must
1316 * be mounted on `/proc` in order for this function to work. Glibc does not have
1317 * this restriction.
1318 * @since v9.2.0
1319 */
1320 function native(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void;
1321 function native(path: PathLike, options: BufferEncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void): void;
1322 function native(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void): void;
1323 function native(path: PathLike, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void;
1324 }
1325 /**
1326 * Returns the resolved pathname.
1327 *
1328 * For detailed information, see the documentation of the asynchronous version of
1329 * this API: {@link realpath}.
1330 * @since v0.1.31
1331 */
1332 export function realpathSync(path: PathLike, options?: EncodingOption): string;
1333 /**
1334 * Synchronous realpath(3) - return the canonicalized absolute pathname.
1335 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1336 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1337 */
1338 export function realpathSync(path: PathLike, options: BufferEncodingOption): Buffer;
1339 /**
1340 * Synchronous realpath(3) - return the canonicalized absolute pathname.
1341 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1342 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1343 */
1344 export function realpathSync(path: PathLike, options?: EncodingOption): string | Buffer;
1345 export namespace realpathSync {
1346 function native(path: PathLike, options?: EncodingOption): string;
1347 function native(path: PathLike, options: BufferEncodingOption): Buffer;
1348 function native(path: PathLike, options?: EncodingOption): string | Buffer;
1349 }
1350 /**
1351 * Asynchronously removes a file or symbolic link. No arguments other than a
1352 * possible exception are given to the completion callback.
1353 *
1354 * ```js
1355 * import { unlink } from 'fs';
1356 * // Assuming that 'path/file.txt' is a regular file.
1357 * unlink('path/file.txt', (err) => {
1358 * if (err) throw err;
1359 * console.log('path/file.txt was deleted');
1360 * });
1361 * ```
1362 *
1363 * `fs.unlink()` will not work on a directory, empty or otherwise. To remove a
1364 * directory, use {@link rmdir}.
1365 *
1366 * See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more details.
1367 * @since v0.0.2
1368 */
1369 export function unlink(path: PathLike, callback: NoParamCallback): void;
1370 export namespace unlink {
1371 /**
1372 * Asynchronous unlink(2) - delete a name and possibly the file it refers to.
1373 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1374 */
1375 function __promisify__(path: PathLike): Promise<void>;
1376 }
1377 /**
1378 * Synchronous [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html). Returns `undefined`.
1379 * @since v0.1.21
1380 */
1381 export function unlinkSync(path: PathLike): void;
1382 export interface RmDirOptions {
1383 /**
1384 * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or
1385 * `EPERM` error is encountered, Node.js will retry the operation with a linear
1386 * backoff wait of `retryDelay` ms longer on each try. This option represents the
1387 * number of retries. This option is ignored if the `recursive` option is not
1388 * `true`.
1389 * @default 0
1390 */
1391 maxRetries?: number | undefined;
1392 /**
1393 * @deprecated since v14.14.0 In future versions of Node.js and will trigger a warning
1394 * `fs.rmdir(path, { recursive: true })` will throw if `path` does not exist or is a file.
1395 * Use `fs.rm(path, { recursive: true, force: true })` instead.
1396 *
1397 * If `true`, perform a recursive directory removal. In
1398 * recursive mode soperations are retried on failure.
1399 * @default false
1400 */
1401 recursive?: boolean | undefined;
1402 /**
1403 * The amount of time in milliseconds to wait between retries.
1404 * This option is ignored if the `recursive` option is not `true`.
1405 * @default 100
1406 */
1407 retryDelay?: number | undefined;
1408 }
1409 /**
1410 * Asynchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). No arguments other than a possible exception are given
1411 * to the completion callback.
1412 *
1413 * Using `fs.rmdir()` on a file (not a directory) results in an `ENOENT` error on
1414 * Windows and an `ENOTDIR` error on POSIX.
1415 *
1416 * To get a behavior similar to the `rm -rf` Unix command, use {@link rm} with options `{ recursive: true, force: true }`.
1417 * @since v0.0.2
1418 */
1419 export function rmdir(path: PathLike, callback: NoParamCallback): void;
1420 export function rmdir(path: PathLike, options: RmDirOptions, callback: NoParamCallback): void;
1421 export namespace rmdir {
1422 /**
1423 * Asynchronous rmdir(2) - delete a directory.
1424 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1425 */
1426 function __promisify__(path: PathLike, options?: RmDirOptions): Promise<void>;
1427 }
1428 /**
1429 * Synchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). Returns `undefined`.
1430 *
1431 * Using `fs.rmdirSync()` on a file (not a directory) results in an `ENOENT` error
1432 * on Windows and an `ENOTDIR` error on POSIX.
1433 *
1434 * To get a behavior similar to the `rm -rf` Unix command, use {@link rmSync} with options `{ recursive: true, force: true }`.
1435 * @since v0.1.21
1436 */
1437 export function rmdirSync(path: PathLike, options?: RmDirOptions): void;
1438 export interface RmOptions {
1439 /**
1440 * When `true`, exceptions will be ignored if `path` does not exist.
1441 * @default false
1442 */
1443 force?: boolean | undefined;
1444 /**
1445 * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or
1446 * `EPERM` error is encountered, Node.js will retry the operation with a linear
1447 * backoff wait of `retryDelay` ms longer on each try. This option represents the
1448 * number of retries. This option is ignored if the `recursive` option is not
1449 * `true`.
1450 * @default 0
1451 */
1452 maxRetries?: number | undefined;
1453 /**
1454 * If `true`, perform a recursive directory removal. In
1455 * recursive mode, operations are retried on failure.
1456 * @default false
1457 */
1458 recursive?: boolean | undefined;
1459 /**
1460 * The amount of time in milliseconds to wait between retries.
1461 * This option is ignored if the `recursive` option is not `true`.
1462 * @default 100
1463 */
1464 retryDelay?: number | undefined;
1465 }
1466 /**
1467 * Asynchronously removes files and directories (modeled on the standard POSIX `rm`utility). No arguments other than a possible exception are given to the
1468 * completion callback.
1469 * @since v14.14.0
1470 */
1471 export function rm(path: PathLike, callback: NoParamCallback): void;
1472 export function rm(path: PathLike, options: RmOptions, callback: NoParamCallback): void;
1473 export namespace rm {
1474 /**
1475 * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility).
1476 */
1477 function __promisify__(path: PathLike, options?: RmOptions): Promise<void>;
1478 }
1479 /**
1480 * Synchronously removes files and directories (modeled on the standard POSIX `rm`utility). Returns `undefined`.
1481 * @since v14.14.0
1482 */
1483 export function rmSync(path: PathLike, options?: RmOptions): void;
1484 export interface MakeDirectoryOptions {
1485 /**
1486 * Indicates whether parent folders should be created.
1487 * If a folder was created, the path to the first created folder will be returned.
1488 * @default false
1489 */
1490 recursive?: boolean | undefined;
1491 /**
1492 * A file mode. If a string is passed, it is parsed as an octal integer. If not specified
1493 * @default 0o777
1494 */
1495 mode?: Mode | undefined;
1496 }
1497 /**
1498 * Asynchronously creates a directory.
1499 *
1500 * The callback is given a possible exception and, if `recursive` is `true`, the
1501 * first directory path created, `(err[, path])`.`path` can still be `undefined` when `recursive` is `true`, if no directory was
1502 * created.
1503 *
1504 * The optional `options` argument can be an integer specifying `mode` (permission
1505 * and sticky bits), or an object with a `mode` property and a `recursive`property indicating whether parent directories should be created. Calling`fs.mkdir()` when `path` is a directory that
1506 * exists results in an error only
1507 * when `recursive` is false.
1508 *
1509 * ```js
1510 * import { mkdir } from 'fs';
1511 *
1512 * // Creates /tmp/a/apple, regardless of whether `/tmp` and /tmp/a exist.
1513 * mkdir('/tmp/a/apple', { recursive: true }, (err) => {
1514 * if (err) throw err;
1515 * });
1516 * ```
1517 *
1518 * On Windows, using `fs.mkdir()` on the root directory even with recursion will
1519 * result in an error:
1520 *
1521 * ```js
1522 * import { mkdir } from 'fs';
1523 *
1524 * mkdir('/', { recursive: true }, (err) => {
1525 * // => [Error: EPERM: operation not permitted, mkdir 'C:\']
1526 * });
1527 * ```
1528 *
1529 * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details.
1530 * @since v0.1.8
1531 */
1532 export function mkdir(
1533 path: PathLike,
1534 options: MakeDirectoryOptions & {
1535 recursive: true;
1536 },
1537 callback: (err: NodeJS.ErrnoException | null, path?: string) => void
1538 ): void;
1539 /**
1540 * Asynchronous mkdir(2) - create a directory.
1541 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1542 * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
1543 * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
1544 */
1545 export function mkdir(
1546 path: PathLike,
1547 options:
1548 | Mode
1549 | (MakeDirectoryOptions & {
1550 recursive?: false | undefined;
1551 })
1552 | null
1553 | undefined,
1554 callback: NoParamCallback
1555 ): void;
1556 /**
1557 * Asynchronous mkdir(2) - create a directory.
1558 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1559 * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
1560 * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
1561 */
1562 export function mkdir(path: PathLike, options: Mode | MakeDirectoryOptions | null | undefined, callback: (err: NodeJS.ErrnoException | null, path?: string) => void): void;
1563 /**
1564 * Asynchronous mkdir(2) - create a directory with a mode of `0o777`.
1565 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1566 */
1567 export function mkdir(path: PathLike, callback: NoParamCallback): void;
1568 export namespace mkdir {
1569 /**
1570 * Asynchronous mkdir(2) - create a directory.
1571 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1572 * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
1573 * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
1574 */
1575 function __promisify__(
1576 path: PathLike,
1577 options: MakeDirectoryOptions & {
1578 recursive: true;
1579 }
1580 ): Promise<string | undefined>;
1581 /**
1582 * Asynchronous mkdir(2) - create a directory.
1583 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1584 * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
1585 * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
1586 */
1587 function __promisify__(
1588 path: PathLike,
1589 options?:
1590 | Mode
1591 | (MakeDirectoryOptions & {
1592 recursive?: false | undefined;
1593 })
1594 | null
1595 ): Promise<void>;
1596 /**
1597 * Asynchronous mkdir(2) - create a directory.
1598 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1599 * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
1600 * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
1601 */
1602 function __promisify__(path: PathLike, options?: Mode | MakeDirectoryOptions | null): Promise<string | undefined>;
1603 }
1604 /**
1605 * Synchronously creates a directory. Returns `undefined`, or if `recursive` is`true`, the first directory path created.
1606 * This is the synchronous version of {@link mkdir}.
1607 *
1608 * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details.
1609 * @since v0.1.21
1610 */
1611 export function mkdirSync(
1612 path: PathLike,
1613 options: MakeDirectoryOptions & {
1614 recursive: true;
1615 }
1616 ): string | undefined;
1617 /**
1618 * Synchronous mkdir(2) - create a directory.
1619 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1620 * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
1621 * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
1622 */
1623 export function mkdirSync(
1624 path: PathLike,
1625 options?:
1626 | Mode
1627 | (MakeDirectoryOptions & {
1628 recursive?: false | undefined;
1629 })
1630 | null
1631 ): void;
1632 /**
1633 * Synchronous mkdir(2) - create a directory.
1634 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1635 * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders
1636 * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`.
1637 */
1638 export function mkdirSync(path: PathLike, options?: Mode | MakeDirectoryOptions | null): string | undefined;
1639 /**
1640 * Creates a unique temporary directory.
1641 *
1642 * Generates six random characters to be appended behind a required`prefix` to create a unique temporary directory. Due to platform
1643 * inconsistencies, avoid trailing `X` characters in `prefix`. Some platforms,
1644 * notably the BSDs, can return more than six random characters, and replace
1645 * trailing `X` characters in `prefix` with random characters.
1646 *
1647 * The created directory path is passed as a string to the callback's second
1648 * parameter.
1649 *
1650 * The optional `options` argument can be a string specifying an encoding, or an
1651 * object with an `encoding` property specifying the character encoding to use.
1652 *
1653 * ```js
1654 * import { mkdtemp } from 'fs';
1655 *
1656 * mkdtemp(path.join(os.tmpdir(), 'foo-'), (err, directory) => {
1657 * if (err) throw err;
1658 * console.log(directory);
1659 * // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2
1660 * });
1661 * ```
1662 *
1663 * The `fs.mkdtemp()` method will append the six randomly selected characters
1664 * directly to the `prefix` string. For instance, given a directory `/tmp`, if the
1665 * intention is to create a temporary directory _within_`/tmp`, the `prefix`must end with a trailing platform-specific path separator
1666 * (`require('path').sep`).
1667 *
1668 * ```js
1669 * import { tmpdir } from 'os';
1670 * import { mkdtemp } from 'fs';
1671 *
1672 * // The parent directory for the new temporary directory
1673 * const tmpDir = tmpdir();
1674 *
1675 * // This method is *INCORRECT*:
1676 * mkdtemp(tmpDir, (err, directory) => {
1677 * if (err) throw err;
1678 * console.log(directory);
1679 * // Will print something similar to `/tmpabc123`.
1680 * // A new temporary directory is created at the file system root
1681 * // rather than *within* the /tmp directory.
1682 * });
1683 *
1684 * // This method is *CORRECT*:
1685 * import { sep } from 'path';
1686 * mkdtemp(`${tmpDir}${sep}`, (err, directory) => {
1687 * if (err) throw err;
1688 * console.log(directory);
1689 * // Will print something similar to `/tmp/abc123`.
1690 * // A new temporary directory is created within
1691 * // the /tmp directory.
1692 * });
1693 * ```
1694 * @since v5.10.0
1695 */
1696 export function mkdtemp(prefix: string, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, folder: string) => void): void;
1697 /**
1698 * Asynchronously creates a unique temporary directory.
1699 * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
1700 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1701 */
1702 export function mkdtemp(
1703 prefix: string,
1704 options:
1705 | 'buffer'
1706 | {
1707 encoding: 'buffer';
1708 },
1709 callback: (err: NodeJS.ErrnoException | null, folder: Buffer) => void
1710 ): void;
1711 /**
1712 * Asynchronously creates a unique temporary directory.
1713 * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
1714 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1715 */
1716 export function mkdtemp(prefix: string, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, folder: string | Buffer) => void): void;
1717 /**
1718 * Asynchronously creates a unique temporary directory.
1719 * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
1720 */
1721 export function mkdtemp(prefix: string, callback: (err: NodeJS.ErrnoException | null, folder: string) => void): void;
1722 export namespace mkdtemp {
1723 /**
1724 * Asynchronously creates a unique temporary directory.
1725 * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
1726 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1727 */
1728 function __promisify__(prefix: string, options?: EncodingOption): Promise<string>;
1729 /**
1730 * Asynchronously creates a unique temporary directory.
1731 * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
1732 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1733 */
1734 function __promisify__(prefix: string, options: BufferEncodingOption): Promise<Buffer>;
1735 /**
1736 * Asynchronously creates a unique temporary directory.
1737 * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
1738 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1739 */
1740 function __promisify__(prefix: string, options?: EncodingOption): Promise<string | Buffer>;
1741 }
1742 /**
1743 * Returns the created directory path.
1744 *
1745 * For detailed information, see the documentation of the asynchronous version of
1746 * this API: {@link mkdtemp}.
1747 *
1748 * The optional `options` argument can be a string specifying an encoding, or an
1749 * object with an `encoding` property specifying the character encoding to use.
1750 * @since v5.10.0
1751 */
1752 export function mkdtempSync(prefix: string, options?: EncodingOption): string;
1753 /**
1754 * Synchronously creates a unique temporary directory.
1755 * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
1756 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1757 */
1758 export function mkdtempSync(prefix: string, options: BufferEncodingOption): Buffer;
1759 /**
1760 * Synchronously creates a unique temporary directory.
1761 * Generates six random characters to be appended behind a required prefix to create a unique temporary directory.
1762 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1763 */
1764 export function mkdtempSync(prefix: string, options?: EncodingOption): string | Buffer;
1765 /**
1766 * Reads the contents of a directory. The callback gets two arguments `(err, files)`where `files` is an array of the names of the files in the directory excluding`'.'` and `'..'`.
1767 *
1768 * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details.
1769 *
1770 * The optional `options` argument can be a string specifying an encoding, or an
1771 * object with an `encoding` property specifying the character encoding to use for
1772 * the filenames passed to the callback. If the `encoding` is set to `'buffer'`,
1773 * the filenames returned will be passed as `Buffer` objects.
1774 *
1775 * If `options.withFileTypes` is set to `true`, the `files` array will contain `fs.Dirent` objects.
1776 * @since v0.1.8
1777 */
1778 export function readdir(
1779 path: PathLike,
1780 options:
1781 | {
1782 encoding: BufferEncoding | null;
1783 withFileTypes?: false | undefined;
1784 }
1785 | BufferEncoding
1786 | undefined
1787 | null,
1788 callback: (err: NodeJS.ErrnoException | null, files: string[]) => void
1789 ): void;
1790 /**
1791 * Asynchronous readdir(3) - read a directory.
1792 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1793 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1794 */
1795 export function readdir(
1796 path: PathLike,
1797 options:
1798 | {
1799 encoding: 'buffer';
1800 withFileTypes?: false | undefined;
1801 }
1802 | 'buffer',
1803 callback: (err: NodeJS.ErrnoException | null, files: Buffer[]) => void
1804 ): void;
1805 /**
1806 * Asynchronous readdir(3) - read a directory.
1807 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1808 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1809 */
1810 export function readdir(
1811 path: PathLike,
1812 options:
1813 | (ObjectEncodingOptions & {
1814 withFileTypes?: false | undefined;
1815 })
1816 | BufferEncoding
1817 | undefined
1818 | null,
1819 callback: (err: NodeJS.ErrnoException | null, files: string[] | Buffer[]) => void
1820 ): void;
1821 /**
1822 * Asynchronous readdir(3) - read a directory.
1823 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1824 */
1825 export function readdir(path: PathLike, callback: (err: NodeJS.ErrnoException | null, files: string[]) => void): void;
1826 /**
1827 * Asynchronous readdir(3) - read a directory.
1828 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1829 * @param options If called with `withFileTypes: true` the result data will be an array of Dirent.
1830 */
1831 export function readdir(
1832 path: PathLike,
1833 options: ObjectEncodingOptions & {
1834 withFileTypes: true;
1835 },
1836 callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void
1837 ): void;
1838 export namespace readdir {
1839 /**
1840 * Asynchronous readdir(3) - read a directory.
1841 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1842 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1843 */
1844 function __promisify__(
1845 path: PathLike,
1846 options?:
1847 | {
1848 encoding: BufferEncoding | null;
1849 withFileTypes?: false | undefined;
1850 }
1851 | BufferEncoding
1852 | null
1853 ): Promise<string[]>;
1854 /**
1855 * Asynchronous readdir(3) - read a directory.
1856 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1857 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1858 */
1859 function __promisify__(
1860 path: PathLike,
1861 options:
1862 | 'buffer'
1863 | {
1864 encoding: 'buffer';
1865 withFileTypes?: false | undefined;
1866 }
1867 ): Promise<Buffer[]>;
1868 /**
1869 * Asynchronous readdir(3) - read a directory.
1870 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1871 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1872 */
1873 function __promisify__(
1874 path: PathLike,
1875 options?:
1876 | (ObjectEncodingOptions & {
1877 withFileTypes?: false | undefined;
1878 })
1879 | BufferEncoding
1880 | null
1881 ): Promise<string[] | Buffer[]>;
1882 /**
1883 * Asynchronous readdir(3) - read a directory.
1884 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1885 * @param options If called with `withFileTypes: true` the result data will be an array of Dirent
1886 */
1887 function __promisify__(
1888 path: PathLike,
1889 options: ObjectEncodingOptions & {
1890 withFileTypes: true;
1891 }
1892 ): Promise<Dirent[]>;
1893 }
1894 /**
1895 * Reads the contents of the directory.
1896 *
1897 * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details.
1898 *
1899 * The optional `options` argument can be a string specifying an encoding, or an
1900 * object with an `encoding` property specifying the character encoding to use for
1901 * the filenames returned. If the `encoding` is set to `'buffer'`,
1902 * the filenames returned will be passed as `Buffer` objects.
1903 *
1904 * If `options.withFileTypes` is set to `true`, the result will contain `fs.Dirent` objects.
1905 * @since v0.1.21
1906 */
1907 export function readdirSync(
1908 path: PathLike,
1909 options?:
1910 | {
1911 encoding: BufferEncoding | null;
1912 withFileTypes?: false | undefined;
1913 }
1914 | BufferEncoding
1915 | null
1916 ): string[];
1917 /**
1918 * Synchronous readdir(3) - read a directory.
1919 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1920 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1921 */
1922 export function readdirSync(
1923 path: PathLike,
1924 options:
1925 | {
1926 encoding: 'buffer';
1927 withFileTypes?: false | undefined;
1928 }
1929 | 'buffer'
1930 ): Buffer[];
1931 /**
1932 * Synchronous readdir(3) - read a directory.
1933 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1934 * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
1935 */
1936 export function readdirSync(
1937 path: PathLike,
1938 options?:
1939 | (ObjectEncodingOptions & {
1940 withFileTypes?: false | undefined;
1941 })
1942 | BufferEncoding
1943 | null
1944 ): string[] | Buffer[];
1945 /**
1946 * Synchronous readdir(3) - read a directory.
1947 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
1948 * @param options If called with `withFileTypes: true` the result data will be an array of Dirent.
1949 */
1950 export function readdirSync(
1951 path: PathLike,
1952 options: ObjectEncodingOptions & {
1953 withFileTypes: true;
1954 }
1955 ): Dirent[];
1956 /**
1957 * Closes the file descriptor. No arguments other than a possible exception are
1958 * given to the completion callback.
1959 *
1960 * Calling `fs.close()` on any file descriptor (`fd`) that is currently in use
1961 * through any other `fs` operation may lead to undefined behavior.
1962 *
1963 * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail.
1964 * @since v0.0.2
1965 */
1966 export function close(fd: number, callback?: NoParamCallback): void;
1967 export namespace close {
1968 /**
1969 * Asynchronous close(2) - close a file descriptor.
1970 * @param fd A file descriptor.
1971 */
1972 function __promisify__(fd: number): Promise<void>;
1973 }
1974 /**
1975 * Closes the file descriptor. Returns `undefined`.
1976 *
1977 * Calling `fs.closeSync()` on any file descriptor (`fd`) that is currently in use
1978 * through any other `fs` operation may lead to undefined behavior.
1979 *
1980 * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail.
1981 * @since v0.1.21
1982 */
1983 export function closeSync(fd: number): void;
1984 /**
1985 * Asynchronous file open. See the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more details.
1986 *
1987 * `mode` sets the file mode (permission and sticky bits), but only if the file was
1988 * created. On Windows, only the write permission can be manipulated; see {@link chmod}.
1989 *
1990 * The callback gets two arguments `(err, fd)`.
1991 *
1992 * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented
1993 * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains
1994 * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams).
1995 *
1996 * Functions based on `fs.open()` exhibit this behavior as well:`fs.writeFile()`, `fs.readFile()`, etc.
1997 * @since v0.0.2
1998 * @param [flags='r'] See `support of file system `flags``.
1999 * @param [mode=0o666]
2000 */
2001 export function open(path: PathLike, flags: OpenMode | undefined, mode: Mode | undefined | null, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void;
2002 /**
2003 * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`.
2004 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2005 * @param [flags='r'] See `support of file system `flags``.
2006 */
2007 export function open(path: PathLike, flags: OpenMode | undefined, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void;
2008 /**
2009 * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`.
2010 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2011 */
2012 export function open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void;
2013
2014 export namespace open {
2015 /**
2016 * Asynchronous open(2) - open and possibly create a file.
2017 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2018 * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`.
2019 */
2020 function __promisify__(path: PathLike, flags: OpenMode, mode?: Mode | null): Promise<number>;
2021 }
2022 /**
2023 * Returns an integer representing the file descriptor.
2024 *
2025 * For detailed information, see the documentation of the asynchronous version of
2026 * this API: {@link open}.
2027 * @since v0.1.21
2028 * @param [flags='r']
2029 * @param [mode=0o666]
2030 */
2031 export function openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number;
2032 /**
2033 * Change the file system timestamps of the object referenced by `path`.
2034 *
2035 * The `atime` and `mtime` arguments follow these rules:
2036 *
2037 * * Values can be either numbers representing Unix epoch time in seconds,`Date`s, or a numeric string like `'123456789.0'`.
2038 * * If the value can not be converted to a number, or is `NaN`, `Infinity` or`-Infinity`, an `Error` will be thrown.
2039 * @since v0.4.2
2040 */
2041 export function utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void;
2042 export namespace utimes {
2043 /**
2044 * Asynchronously change file timestamps of the file referenced by the supplied path.
2045 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2046 * @param atime The last access time. If a string is provided, it will be coerced to number.
2047 * @param mtime The last modified time. If a string is provided, it will be coerced to number.
2048 */
2049 function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void>;
2050 }
2051 /**
2052 * Returns `undefined`.
2053 *
2054 * For detailed information, see the documentation of the asynchronous version of
2055 * this API: {@link utimes}.
2056 * @since v0.4.2
2057 */
2058 export function utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void;
2059 /**
2060 * Change the file system timestamps of the object referenced by the supplied file
2061 * descriptor. See {@link utimes}.
2062 * @since v0.4.2
2063 */
2064 export function futimes(fd: number, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void;
2065 export namespace futimes {
2066 /**
2067 * Asynchronously change file timestamps of the file referenced by the supplied file descriptor.
2068 * @param fd A file descriptor.
2069 * @param atime The last access time. If a string is provided, it will be coerced to number.
2070 * @param mtime The last modified time. If a string is provided, it will be coerced to number.
2071 */
2072 function __promisify__(fd: number, atime: TimeLike, mtime: TimeLike): Promise<void>;
2073 }
2074 /**
2075 * Synchronous version of {@link futimes}. Returns `undefined`.
2076 * @since v0.4.2
2077 */
2078 export function futimesSync(fd: number, atime: TimeLike, mtime: TimeLike): void;
2079 /**
2080 * Request that all data for the open file descriptor is flushed to the storage
2081 * device. The specific implementation is operating system and device specific.
2082 * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. No arguments other
2083 * than a possible exception are given to the completion callback.
2084 * @since v0.1.96
2085 */
2086 export function fsync(fd: number, callback: NoParamCallback): void;
2087 export namespace fsync {
2088 /**
2089 * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device.
2090 * @param fd A file descriptor.
2091 */
2092 function __promisify__(fd: number): Promise<void>;
2093 }
2094 /**
2095 * Request that all data for the open file descriptor is flushed to the storage
2096 * device. The specific implementation is operating system and device specific.
2097 * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. Returns `undefined`.
2098 * @since v0.1.96
2099 */
2100 export function fsyncSync(fd: number): void;
2101 /**
2102 * Write `buffer` to the file specified by `fd`. If `buffer` is a normal object, it
2103 * must have an own `toString` function property.
2104 *
2105 * `offset` determines the part of the buffer to be written, and `length` is
2106 * an integer specifying the number of bytes to write.
2107 *
2108 * `position` refers to the offset from the beginning of the file where this data
2109 * should be written. If `typeof position !== 'number'`, the data will be written
2110 * at the current position. See [`pwrite(2)`](http://man7.org/linux/man-pages/man2/pwrite.2.html).
2111 *
2112 * The callback will be given three arguments `(err, bytesWritten, buffer)` where`bytesWritten` specifies how many _bytes_ were written from `buffer`.
2113 *
2114 * If this method is invoked as its `util.promisify()` ed version, it returns
2115 * a promise for an `Object` with `bytesWritten` and `buffer` properties.
2116 *
2117 * It is unsafe to use `fs.write()` multiple times on the same file without waiting
2118 * for the callback. For this scenario, {@link createWriteStream} is
2119 * recommended.
2120 *
2121 * On Linux, positional writes don't work when the file is opened in append mode.
2122 * The kernel ignores the position argument and always appends the data to
2123 * the end of the file.
2124 * @since v0.0.2
2125 */
2126 export function write<TBuffer extends NodeJS.ArrayBufferView>(
2127 fd: number,
2128 buffer: TBuffer,
2129 offset: number | undefined | null,
2130 length: number | undefined | null,
2131 position: number | undefined | null,
2132 callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void
2133 ): void;
2134 /**
2135 * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
2136 * @param fd A file descriptor.
2137 * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
2138 * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
2139 */
2140 export function write<TBuffer extends NodeJS.ArrayBufferView>(
2141 fd: number,
2142 buffer: TBuffer,
2143 offset: number | undefined | null,
2144 length: number | undefined | null,
2145 callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void
2146 ): void;
2147 /**
2148 * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
2149 * @param fd A file descriptor.
2150 * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
2151 */
2152 export function write<TBuffer extends NodeJS.ArrayBufferView>(
2153 fd: number,
2154 buffer: TBuffer,
2155 offset: number | undefined | null,
2156 callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void
2157 ): void;
2158 /**
2159 * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
2160 * @param fd A file descriptor.
2161 */
2162 export function write<TBuffer extends NodeJS.ArrayBufferView>(fd: number, buffer: TBuffer, callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void): void;
2163 /**
2164 * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
2165 * @param fd A file descriptor.
2166 * @param string A string to write.
2167 * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
2168 * @param encoding The expected string encoding.
2169 */
2170 export function write(
2171 fd: number,
2172 string: string,
2173 position: number | undefined | null,
2174 encoding: BufferEncoding | undefined | null,
2175 callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void
2176 ): void;
2177 /**
2178 * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
2179 * @param fd A file descriptor.
2180 * @param string A string to write.
2181 * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
2182 */
2183 export function write(fd: number, string: string, position: number | undefined | null, callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void): void;
2184 /**
2185 * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
2186 * @param fd A file descriptor.
2187 * @param string A string to write.
2188 */
2189 export function write(fd: number, string: string, callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void): void;
2190 export namespace write {
2191 /**
2192 * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor.
2193 * @param fd A file descriptor.
2194 * @param offset The part of the buffer to be written. If not supplied, defaults to `0`.
2195 * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`.
2196 * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
2197 */
2198 function __promisify__<TBuffer extends NodeJS.ArrayBufferView>(
2199 fd: number,
2200 buffer?: TBuffer,
2201 offset?: number,
2202 length?: number,
2203 position?: number | null
2204 ): Promise<{
2205 bytesWritten: number;
2206 buffer: TBuffer;
2207 }>;
2208 /**
2209 * Asynchronously writes `string` to the file referenced by the supplied file descriptor.
2210 * @param fd A file descriptor.
2211 * @param string A string to write.
2212 * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
2213 * @param encoding The expected string encoding.
2214 */
2215 function __promisify__(
2216 fd: number,
2217 string: string,
2218 position?: number | null,
2219 encoding?: BufferEncoding | null
2220 ): Promise<{
2221 bytesWritten: number;
2222 buffer: string;
2223 }>;
2224 }
2225 /**
2226 * If `buffer` is a plain object, it must have an own (not inherited) `toString`function property.
2227 *
2228 * For detailed information, see the documentation of the asynchronous version of
2229 * this API: {@link write}.
2230 * @since v0.1.21
2231 * @return The number of bytes written.
2232 */
2233 export function writeSync(fd: number, buffer: NodeJS.ArrayBufferView, offset?: number | null, length?: number | null, position?: number | null): number;
2234 /**
2235 * Synchronously writes `string` to the file referenced by the supplied file descriptor, returning the number of bytes written.
2236 * @param fd A file descriptor.
2237 * @param string A string to write.
2238 * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position.
2239 * @param encoding The expected string encoding.
2240 */
2241 export function writeSync(fd: number, string: string, position?: number | null, encoding?: BufferEncoding | null): number;
2242 export type ReadPosition = number | bigint;
2243 export interface ReadSyncOptions {
2244 /**
2245 * @default 0
2246 */
2247 offset?: number | undefined;
2248 /**
2249 * @default `length of buffer`
2250 */
2251 length?: number | undefined;
2252 /**
2253 * @default null
2254 */
2255 position?: ReadPosition | null | undefined;
2256 }
2257 export interface ReadAsyncOptions<TBuffer extends NodeJS.ArrayBufferView> extends ReadSyncOptions {
2258 buffer?: TBuffer;
2259 }
2260 /**
2261 * Read data from the file specified by `fd`.
2262 *
2263 * The callback is given the three arguments, `(err, bytesRead, buffer)`.
2264 *
2265 * If the file is not modified concurrently, the end-of-file is reached when the
2266 * number of bytes read is zero.
2267 *
2268 * If this method is invoked as its `util.promisify()` ed version, it returns
2269 * a promise for an `Object` with `bytesRead` and `buffer` properties.
2270 * @since v0.0.2
2271 * @param buffer The buffer that the data will be written to.
2272 * @param offset The position in `buffer` to write the data to.
2273 * @param length The number of bytes to read.
2274 * @param position Specifies where to begin reading from in the file. If `position` is `null` or `-1 `, data will be read from the current file position, and the file position will be updated. If
2275 * `position` is an integer, the file position will be unchanged.
2276 */
2277 export function read<TBuffer extends NodeJS.ArrayBufferView>(
2278 fd: number,
2279 buffer: TBuffer,
2280 offset: number,
2281 length: number,
2282 position: ReadPosition | null,
2283 callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void
2284 ): void;
2285 /**
2286 * Similar to the above `fs.read` function, this version takes an optional `options` object.
2287 * If not otherwise specified in an `options` object,
2288 * `buffer` defaults to `Buffer.alloc(16384)`,
2289 * `offset` defaults to `0`,
2290 * `length` defaults to `buffer.byteLength`, `- offset` as of Node 17.6.0
2291 * `position` defaults to `null`
2292 * @since v12.17.0, 13.11.0
2293 */
2294 export function read<TBuffer extends NodeJS.ArrayBufferView>(
2295 fd: number,
2296 options: ReadAsyncOptions<TBuffer>,
2297 callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void
2298 ): void;
2299 export function read(
2300 fd: number,
2301 callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: NodeJS.ArrayBufferView) => void
2302 ): void;
2303 export namespace read {
2304 /**
2305 * @param fd A file descriptor.
2306 * @param buffer The buffer that the data will be written to.
2307 * @param offset The offset in the buffer at which to start writing.
2308 * @param length The number of bytes to read.
2309 * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position.
2310 */
2311 function __promisify__<TBuffer extends NodeJS.ArrayBufferView>(
2312 fd: number,
2313 buffer: TBuffer,
2314 offset: number,
2315 length: number,
2316 position: number | null
2317 ): Promise<{
2318 bytesRead: number;
2319 buffer: TBuffer;
2320 }>;
2321 function __promisify__<TBuffer extends NodeJS.ArrayBufferView>(
2322 fd: number,
2323 options: ReadAsyncOptions<TBuffer>
2324 ): Promise<{
2325 bytesRead: number;
2326 buffer: TBuffer;
2327 }>;
2328 function __promisify__(
2329 fd: number
2330 ): Promise<{
2331 bytesRead: number;
2332 buffer: NodeJS.ArrayBufferView;
2333 }>;
2334 }
2335 /**
2336 * Returns the number of `bytesRead`.
2337 *
2338 * For detailed information, see the documentation of the asynchronous version of
2339 * this API: {@link read}.
2340 * @since v0.1.21
2341 */
2342 export function readSync(fd: number, buffer: NodeJS.ArrayBufferView, offset: number, length: number, position: ReadPosition | null): number;
2343 /**
2344 * Similar to the above `fs.readSync` function, this version takes an optional `options` object.
2345 * If no `options` object is specified, it will default with the above values.
2346 */
2347 export function readSync(fd: number, buffer: NodeJS.ArrayBufferView, opts?: ReadSyncOptions): number;
2348 /**
2349 * Asynchronously reads the entire contents of a file.
2350 *
2351 * ```js
2352 * import { readFile } from 'fs';
2353 *
2354 * readFile('/etc/passwd', (err, data) => {
2355 * if (err) throw err;
2356 * console.log(data);
2357 * });
2358 * ```
2359 *
2360 * The callback is passed two arguments `(err, data)`, where `data` is the
2361 * contents of the file.
2362 *
2363 * If no encoding is specified, then the raw buffer is returned.
2364 *
2365 * If `options` is a string, then it specifies the encoding:
2366 *
2367 * ```js
2368 * import { readFile } from 'fs';
2369 *
2370 * readFile('/etc/passwd', 'utf8', callback);
2371 * ```
2372 *
2373 * When the path is a directory, the behavior of `fs.readFile()` and {@link readFileSync} is platform-specific. On macOS, Linux, and Windows, an
2374 * error will be returned. On FreeBSD, a representation of the directory's contents
2375 * will be returned.
2376 *
2377 * ```js
2378 * import { readFile } from 'fs';
2379 *
2380 * // macOS, Linux, and Windows
2381 * readFile('<directory>', (err, data) => {
2382 * // => [Error: EISDIR: illegal operation on a directory, read <directory>]
2383 * });
2384 *
2385 * // FreeBSD
2386 * readFile('<directory>', (err, data) => {
2387 * // => null, <data>
2388 * });
2389 * ```
2390 *
2391 * It is possible to abort an ongoing request using an `AbortSignal`. If a
2392 * request is aborted the callback is called with an `AbortError`:
2393 *
2394 * ```js
2395 * import { readFile } from 'fs';
2396 *
2397 * const controller = new AbortController();
2398 * const signal = controller.signal;
2399 * readFile(fileInfo[0].name, { signal }, (err, buf) => {
2400 * // ...
2401 * });
2402 * // When you want to abort the request
2403 * controller.abort();
2404 * ```
2405 *
2406 * The `fs.readFile()` function buffers the entire file. To minimize memory costs,
2407 * when possible prefer streaming via `fs.createReadStream()`.
2408 *
2409 * Aborting an ongoing request does not abort individual operating
2410 * system requests but rather the internal buffering `fs.readFile` performs.
2411 * @since v0.1.29
2412 * @param path filename or file descriptor
2413 */
2414 export function readFile(
2415 path: PathOrFileDescriptor,
2416 options:
2417 | ({
2418 encoding?: null | undefined;
2419 flag?: string | undefined;
2420 } & Abortable)
2421 | undefined
2422 | null,
2423 callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void
2424 ): void;
2425 /**
2426 * Asynchronously reads the entire contents of a file.
2427 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2428 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2429 * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
2430 * If a flag is not provided, it defaults to `'r'`.
2431 */
2432 export function readFile(
2433 path: PathOrFileDescriptor,
2434 options:
2435 | ({
2436 encoding: BufferEncoding;
2437 flag?: string | undefined;
2438 } & Abortable)
2439 | BufferEncoding,
2440 callback: (err: NodeJS.ErrnoException | null, data: string) => void
2441 ): void;
2442 /**
2443 * Asynchronously reads the entire contents of a file.
2444 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2445 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2446 * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
2447 * If a flag is not provided, it defaults to `'r'`.
2448 */
2449 export function readFile(
2450 path: PathOrFileDescriptor,
2451 options:
2452 | (ObjectEncodingOptions & {
2453 flag?: string | undefined;
2454 } & Abortable)
2455 | BufferEncoding
2456 | undefined
2457 | null,
2458 callback: (err: NodeJS.ErrnoException | null, data: string | Buffer) => void
2459 ): void;
2460 /**
2461 * Asynchronously reads the entire contents of a file.
2462 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2463 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2464 */
2465 export function readFile(path: PathOrFileDescriptor, callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void): void;
2466 export namespace readFile {
2467 /**
2468 * Asynchronously reads the entire contents of a file.
2469 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2470 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2471 * @param options An object that may contain an optional flag.
2472 * If a flag is not provided, it defaults to `'r'`.
2473 */
2474 function __promisify__(
2475 path: PathOrFileDescriptor,
2476 options?: {
2477 encoding?: null | undefined;
2478 flag?: string | undefined;
2479 } | null
2480 ): Promise<Buffer>;
2481 /**
2482 * Asynchronously reads the entire contents of a file.
2483 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2484 * URL support is _experimental_.
2485 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2486 * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
2487 * If a flag is not provided, it defaults to `'r'`.
2488 */
2489 function __promisify__(
2490 path: PathOrFileDescriptor,
2491 options:
2492 | {
2493 encoding: BufferEncoding;
2494 flag?: string | undefined;
2495 }
2496 | BufferEncoding
2497 ): Promise<string>;
2498 /**
2499 * Asynchronously reads the entire contents of a file.
2500 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2501 * URL support is _experimental_.
2502 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2503 * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
2504 * If a flag is not provided, it defaults to `'r'`.
2505 */
2506 function __promisify__(
2507 path: PathOrFileDescriptor,
2508 options?:
2509 | (ObjectEncodingOptions & {
2510 flag?: string | undefined;
2511 })
2512 | BufferEncoding
2513 | null
2514 ): Promise<string | Buffer>;
2515 }
2516 /**
2517 * Returns the contents of the `path`.
2518 *
2519 * For detailed information, see the documentation of the asynchronous version of
2520 * this API: {@link readFile}.
2521 *
2522 * If the `encoding` option is specified then this function returns a
2523 * string. Otherwise it returns a buffer.
2524 *
2525 * Similar to {@link readFile}, when the path is a directory, the behavior of`fs.readFileSync()` is platform-specific.
2526 *
2527 * ```js
2528 * import { readFileSync } from 'fs';
2529 *
2530 * // macOS, Linux, and Windows
2531 * readFileSync('<directory>');
2532 * // => [Error: EISDIR: illegal operation on a directory, read <directory>]
2533 *
2534 * // FreeBSD
2535 * readFileSync('<directory>'); // => <data>
2536 * ```
2537 * @since v0.1.8
2538 * @param path filename or file descriptor
2539 */
2540 export function readFileSync(
2541 path: PathOrFileDescriptor,
2542 options?: {
2543 encoding?: null | undefined;
2544 flag?: string | undefined;
2545 } | null
2546 ): Buffer;
2547 /**
2548 * Synchronously reads the entire contents of a file.
2549 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2550 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2551 * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
2552 * If a flag is not provided, it defaults to `'r'`.
2553 */
2554 export function readFileSync(
2555 path: PathOrFileDescriptor,
2556 options:
2557 | {
2558 encoding: BufferEncoding;
2559 flag?: string | undefined;
2560 }
2561 | BufferEncoding
2562 ): string;
2563 /**
2564 * Synchronously reads the entire contents of a file.
2565 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2566 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2567 * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
2568 * If a flag is not provided, it defaults to `'r'`.
2569 */
2570 export function readFileSync(
2571 path: PathOrFileDescriptor,
2572 options?:
2573 | (ObjectEncodingOptions & {
2574 flag?: string | undefined;
2575 })
2576 | BufferEncoding
2577 | null
2578 ): string | Buffer;
2579 export type WriteFileOptions =
2580 | (ObjectEncodingOptions &
2581 Abortable & {
2582 mode?: Mode | undefined;
2583 flag?: string | undefined;
2584 })
2585 | BufferEncoding
2586 | null;
2587 /**
2588 * When `file` is a filename, asynchronously writes data to the file, replacing the
2589 * file if it already exists. `data` can be a string or a buffer.
2590 *
2591 * When `file` is a file descriptor, the behavior is similar to calling`fs.write()` directly (which is recommended). See the notes below on using
2592 * a file descriptor.
2593 *
2594 * The `encoding` option is ignored if `data` is a buffer.
2595 *
2596 * The `mode` option only affects the newly created file. See {@link open} for more details.
2597 *
2598 * If `data` is a plain object, it must have an own (not inherited) `toString`function property.
2599 *
2600 * ```js
2601 * import { writeFile } from 'fs';
2602 * import { Buffer } from 'buffer';
2603 *
2604 * const data = new Uint8Array(Buffer.from('Hello Node.js'));
2605 * writeFile('message.txt', data, (err) => {
2606 * if (err) throw err;
2607 * console.log('The file has been saved!');
2608 * });
2609 * ```
2610 *
2611 * If `options` is a string, then it specifies the encoding:
2612 *
2613 * ```js
2614 * import { writeFile } from 'fs';
2615 *
2616 * writeFile('message.txt', 'Hello Node.js', 'utf8', callback);
2617 * ```
2618 *
2619 * It is unsafe to use `fs.writeFile()` multiple times on the same file without
2620 * waiting for the callback. For this scenario, {@link createWriteStream} is
2621 * recommended.
2622 *
2623 * Similarly to `fs.readFile` \- `fs.writeFile` is a convenience method that
2624 * performs multiple `write` calls internally to write the buffer passed to it.
2625 * For performance sensitive code consider using {@link createWriteStream}.
2626 *
2627 * It is possible to use an `AbortSignal` to cancel an `fs.writeFile()`.
2628 * Cancelation is "best effort", and some amount of data is likely still
2629 * to be written.
2630 *
2631 * ```js
2632 * import { writeFile } from 'fs';
2633 * import { Buffer } from 'buffer';
2634 *
2635 * const controller = new AbortController();
2636 * const { signal } = controller;
2637 * const data = new Uint8Array(Buffer.from('Hello Node.js'));
2638 * writeFile('message.txt', data, { signal }, (err) => {
2639 * // When a request is aborted - the callback is called with an AbortError
2640 * });
2641 * // When the request should be aborted
2642 * controller.abort();
2643 * ```
2644 *
2645 * Aborting an ongoing request does not abort individual operating
2646 * system requests but rather the internal buffering `fs.writeFile` performs.
2647 * @since v0.1.29
2648 * @param file filename or file descriptor
2649 */
2650 export function writeFile(file: PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView, options: WriteFileOptions, callback: NoParamCallback): void;
2651 /**
2652 * Asynchronously writes data to a file, replacing the file if it already exists.
2653 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2654 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2655 * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
2656 */
2657 export function writeFile(path: PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView, callback: NoParamCallback): void;
2658 export namespace writeFile {
2659 /**
2660 * Asynchronously writes data to a file, replacing the file if it already exists.
2661 * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2662 * URL support is _experimental_.
2663 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2664 * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
2665 * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
2666 * If `encoding` is not supplied, the default of `'utf8'` is used.
2667 * If `mode` is not supplied, the default of `0o666` is used.
2668 * If `mode` is a string, it is parsed as an octal integer.
2669 * If `flag` is not supplied, the default of `'w'` is used.
2670 */
2671 function __promisify__(path: PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): Promise<void>;
2672 }
2673 /**
2674 * Returns `undefined`.
2675 *
2676 * If `data` is a plain object, it must have an own (not inherited) `toString`function property.
2677 *
2678 * The `mode` option only affects the newly created file. See {@link open} for more details.
2679 *
2680 * For detailed information, see the documentation of the asynchronous version of
2681 * this API: {@link writeFile}.
2682 * @since v0.1.29
2683 * @param file filename or file descriptor
2684 */
2685 export function writeFileSync(file: PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): void;
2686 /**
2687 * Asynchronously append data to a file, creating the file if it does not yet
2688 * exist. `data` can be a string or a `Buffer`.
2689 *
2690 * The `mode` option only affects the newly created file. See {@link open} for more details.
2691 *
2692 * ```js
2693 * import { appendFile } from 'fs';
2694 *
2695 * appendFile('message.txt', 'data to append', (err) => {
2696 * if (err) throw err;
2697 * console.log('The "data to append" was appended to file!');
2698 * });
2699 * ```
2700 *
2701 * If `options` is a string, then it specifies the encoding:
2702 *
2703 * ```js
2704 * import { appendFile } from 'fs';
2705 *
2706 * appendFile('message.txt', 'data to append', 'utf8', callback);
2707 * ```
2708 *
2709 * The `path` may be specified as a numeric file descriptor that has been opened
2710 * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will
2711 * not be closed automatically.
2712 *
2713 * ```js
2714 * import { open, close, appendFile } from 'fs';
2715 *
2716 * function closeFd(fd) {
2717 * close(fd, (err) => {
2718 * if (err) throw err;
2719 * });
2720 * }
2721 *
2722 * open('message.txt', 'a', (err, fd) => {
2723 * if (err) throw err;
2724 *
2725 * try {
2726 * appendFile(fd, 'data to append', 'utf8', (err) => {
2727 * closeFd(fd);
2728 * if (err) throw err;
2729 * });
2730 * } catch (err) {
2731 * closeFd(fd);
2732 * throw err;
2733 * }
2734 * });
2735 * ```
2736 * @since v0.6.7
2737 * @param path filename or file descriptor
2738 */
2739 export function appendFile(path: PathOrFileDescriptor, data: string | Uint8Array, options: WriteFileOptions, callback: NoParamCallback): void;
2740 /**
2741 * Asynchronously append data to a file, creating the file if it does not exist.
2742 * @param file A path to a file. If a URL is provided, it must use the `file:` protocol.
2743 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2744 * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
2745 */
2746 export function appendFile(file: PathOrFileDescriptor, data: string | Uint8Array, callback: NoParamCallback): void;
2747 export namespace appendFile {
2748 /**
2749 * Asynchronously append data to a file, creating the file if it does not exist.
2750 * @param file A path to a file. If a URL is provided, it must use the `file:` protocol.
2751 * URL support is _experimental_.
2752 * If a file descriptor is provided, the underlying file will _not_ be closed automatically.
2753 * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string.
2754 * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag.
2755 * If `encoding` is not supplied, the default of `'utf8'` is used.
2756 * If `mode` is not supplied, the default of `0o666` is used.
2757 * If `mode` is a string, it is parsed as an octal integer.
2758 * If `flag` is not supplied, the default of `'a'` is used.
2759 */
2760 function __promisify__(file: PathOrFileDescriptor, data: string | Uint8Array, options?: WriteFileOptions): Promise<void>;
2761 }
2762 /**
2763 * Synchronously append data to a file, creating the file if it does not yet
2764 * exist. `data` can be a string or a `Buffer`.
2765 *
2766 * The `mode` option only affects the newly created file. See {@link open} for more details.
2767 *
2768 * ```js
2769 * import { appendFileSync } from 'fs';
2770 *
2771 * try {
2772 * appendFileSync('message.txt', 'data to append');
2773 * console.log('The "data to append" was appended to file!');
2774 * } catch (err) {
2775 * // Handle the error
2776 * }
2777 * ```
2778 *
2779 * If `options` is a string, then it specifies the encoding:
2780 *
2781 * ```js
2782 * import { appendFileSync } from 'fs';
2783 *
2784 * appendFileSync('message.txt', 'data to append', 'utf8');
2785 * ```
2786 *
2787 * The `path` may be specified as a numeric file descriptor that has been opened
2788 * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will
2789 * not be closed automatically.
2790 *
2791 * ```js
2792 * import { openSync, closeSync, appendFileSync } from 'fs';
2793 *
2794 * let fd;
2795 *
2796 * try {
2797 * fd = openSync('message.txt', 'a');
2798 * appendFileSync(fd, 'data to append', 'utf8');
2799 * } catch (err) {
2800 * // Handle the error
2801 * } finally {
2802 * if (fd !== undefined)
2803 * closeSync(fd);
2804 * }
2805 * ```
2806 * @since v0.6.7
2807 * @param path filename or file descriptor
2808 */
2809 export function appendFileSync(path: PathOrFileDescriptor, data: string | Uint8Array, options?: WriteFileOptions): void;
2810 /**
2811 * Watch for changes on `filename`. The callback `listener` will be called each
2812 * time the file is accessed.
2813 *
2814 * The `options` argument may be omitted. If provided, it should be an object. The`options` object may contain a boolean named `persistent` that indicates
2815 * whether the process should continue to run as long as files are being watched.
2816 * The `options` object may specify an `interval` property indicating how often the
2817 * target should be polled in milliseconds.
2818 *
2819 * The `listener` gets two arguments the current stat object and the previous
2820 * stat object:
2821 *
2822 * ```js
2823 * import { watchFile } from 'fs';
2824 *
2825 * watchFile('message.text', (curr, prev) => {
2826 * console.log(`the current mtime is: ${curr.mtime}`);
2827 * console.log(`the previous mtime was: ${prev.mtime}`);
2828 * });
2829 * ```
2830 *
2831 * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`,
2832 * the numeric values in these objects are specified as `BigInt`s.
2833 *
2834 * To be notified when the file was modified, not just accessed, it is necessary
2835 * to compare `curr.mtimeMs` and `prev.mtimeMs`.
2836 *
2837 * When an `fs.watchFile` operation results in an `ENOENT` error, it
2838 * will invoke the listener once, with all the fields zeroed (or, for dates, the
2839 * Unix Epoch). If the file is created later on, the listener will be called
2840 * again, with the latest stat objects. This is a change in functionality since
2841 * v0.10.
2842 *
2843 * Using {@link watch} is more efficient than `fs.watchFile` and`fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and`fs.unwatchFile` when possible.
2844 *
2845 * When a file being watched by `fs.watchFile()` disappears and reappears,
2846 * then the contents of `previous` in the second callback event (the file's
2847 * reappearance) will be the same as the contents of `previous` in the first
2848 * callback event (its disappearance).
2849 *
2850 * This happens when:
2851 *
2852 * * the file is deleted, followed by a restore
2853 * * the file is renamed and then renamed a second time back to its original name
2854 * @since v0.1.31
2855 */
2856 export interface WatchFileOptions {
2857 bigint?: boolean | undefined;
2858 persistent?: boolean | undefined;
2859 interval?: number | undefined;
2860 }
2861 /**
2862 * Watch for changes on `filename`. The callback `listener` will be called each
2863 * time the file is accessed.
2864 *
2865 * The `options` argument may be omitted. If provided, it should be an object. The`options` object may contain a boolean named `persistent` that indicates
2866 * whether the process should continue to run as long as files are being watched.
2867 * The `options` object may specify an `interval` property indicating how often the
2868 * target should be polled in milliseconds.
2869 *
2870 * The `listener` gets two arguments the current stat object and the previous
2871 * stat object:
2872 *
2873 * ```js
2874 * import { watchFile } from 'fs';
2875 *
2876 * watchFile('message.text', (curr, prev) => {
2877 * console.log(`the current mtime is: ${curr.mtime}`);
2878 * console.log(`the previous mtime was: ${prev.mtime}`);
2879 * });
2880 * ```
2881 *
2882 * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`,
2883 * the numeric values in these objects are specified as `BigInt`s.
2884 *
2885 * To be notified when the file was modified, not just accessed, it is necessary
2886 * to compare `curr.mtimeMs` and `prev.mtimeMs`.
2887 *
2888 * When an `fs.watchFile` operation results in an `ENOENT` error, it
2889 * will invoke the listener once, with all the fields zeroed (or, for dates, the
2890 * Unix Epoch). If the file is created later on, the listener will be called
2891 * again, with the latest stat objects. This is a change in functionality since
2892 * v0.10.
2893 *
2894 * Using {@link watch} is more efficient than `fs.watchFile` and`fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and`fs.unwatchFile` when possible.
2895 *
2896 * When a file being watched by `fs.watchFile()` disappears and reappears,
2897 * then the contents of `previous` in the second callback event (the file's
2898 * reappearance) will be the same as the contents of `previous` in the first
2899 * callback event (its disappearance).
2900 *
2901 * This happens when:
2902 *
2903 * * the file is deleted, followed by a restore
2904 * * the file is renamed and then renamed a second time back to its original name
2905 * @since v0.1.31
2906 */
2907 export function watchFile(
2908 filename: PathLike,
2909 options:
2910 | (WatchFileOptions & {
2911 bigint?: false | undefined;
2912 })
2913 | undefined,
2914 listener: (curr: Stats, prev: Stats) => void
2915 ): StatWatcher;
2916 export function watchFile(
2917 filename: PathLike,
2918 options:
2919 | (WatchFileOptions & {
2920 bigint: true;
2921 })
2922 | undefined,
2923 listener: (curr: BigIntStats, prev: BigIntStats) => void
2924 ): StatWatcher;
2925 /**
2926 * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed.
2927 * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
2928 */
2929 export function watchFile(filename: PathLike, listener: (curr: Stats, prev: Stats) => void): StatWatcher;
2930 /**
2931 * Stop watching for changes on `filename`. If `listener` is specified, only that
2932 * particular listener is removed. Otherwise, _all_ listeners are removed,
2933 * effectively stopping watching of `filename`.
2934 *
2935 * Calling `fs.unwatchFile()` with a filename that is not being watched is a
2936 * no-op, not an error.
2937 *
2938 * Using {@link watch} is more efficient than `fs.watchFile()` and`fs.unwatchFile()`. `fs.watch()` should be used instead of `fs.watchFile()`and `fs.unwatchFile()` when possible.
2939 * @since v0.1.31
2940 * @param listener Optional, a listener previously attached using `fs.watchFile()`
2941 */
2942 export function unwatchFile(filename: PathLike, listener?: (curr: Stats, prev: Stats) => void): void;
2943 export interface WatchOptions extends Abortable {
2944 encoding?: BufferEncoding | 'buffer' | undefined;
2945 persistent?: boolean | undefined;
2946 recursive?: boolean | undefined;
2947 }
2948 export type WatchEventType = 'rename' | 'change';
2949 export type WatchListener<T> = (event: WatchEventType, filename: T) => void;
2950 /**
2951 * Watch for changes on `filename`, where `filename` is either a file or a
2952 * directory.
2953 *
2954 * The second argument is optional. If `options` is provided as a string, it
2955 * specifies the `encoding`. Otherwise `options` should be passed as an object.
2956 *
2957 * The listener callback gets two arguments `(eventType, filename)`. `eventType`is either `'rename'` or `'change'`, and `filename` is the name of the file
2958 * which triggered the event.
2959 *
2960 * On most platforms, `'rename'` is emitted whenever a filename appears or
2961 * disappears in the directory.
2962 *
2963 * The listener callback is attached to the `'change'` event fired by `fs.FSWatcher`, but it is not the same thing as the `'change'` value of`eventType`.
2964 *
2965 * If a `signal` is passed, aborting the corresponding AbortController will close
2966 * the returned `fs.FSWatcher`.
2967 * @since v0.5.10
2968 * @param listener
2969 */
2970 export function watch(
2971 filename: PathLike,
2972 options:
2973 | (WatchOptions & {
2974 encoding: 'buffer';
2975 })
2976 | 'buffer',
2977 listener?: WatchListener<Buffer>
2978 ): FSWatcher;
2979 /**
2980 * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`.
2981 * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
2982 * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options.
2983 * If `encoding` is not supplied, the default of `'utf8'` is used.
2984 * If `persistent` is not supplied, the default of `true` is used.
2985 * If `recursive` is not supplied, the default of `false` is used.
2986 */
2987 export function watch(filename: PathLike, options?: WatchOptions | BufferEncoding | null, listener?: WatchListener<string>): FSWatcher;
2988 /**
2989 * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`.
2990 * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
2991 * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options.
2992 * If `encoding` is not supplied, the default of `'utf8'` is used.
2993 * If `persistent` is not supplied, the default of `true` is used.
2994 * If `recursive` is not supplied, the default of `false` is used.
2995 */
2996 export function watch(filename: PathLike, options: WatchOptions | string, listener?: WatchListener<string | Buffer>): FSWatcher;
2997 /**
2998 * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`.
2999 * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
3000 */
3001 export function watch(filename: PathLike, listener?: WatchListener<string>): FSWatcher;
3002 /**
3003 * Test whether or not the given path exists by checking with the file system.
3004 * Then call the `callback` argument with either true or false:
3005 *
3006 * ```js
3007 * import { exists } from 'fs';
3008 *
3009 * exists('/etc/passwd', (e) => {
3010 * console.log(e ? 'it exists' : 'no passwd!');
3011 * });
3012 * ```
3013 *
3014 * **The parameters for this callback are not consistent with other Node.js**
3015 * **callbacks.** Normally, the first parameter to a Node.js callback is an `err`parameter, optionally followed by other parameters. The `fs.exists()` callback
3016 * has only one boolean parameter. This is one reason `fs.access()` is recommended
3017 * instead of `fs.exists()`.
3018 *
3019 * Using `fs.exists()` to check for the existence of a file before calling`fs.open()`, `fs.readFile()` or `fs.writeFile()` is not recommended. Doing
3020 * so introduces a race condition, since other processes may change the file's
3021 * state between the two calls. Instead, user code should open/read/write the
3022 * file directly and handle the error raised if the file does not exist.
3023 *
3024 * **write (NOT RECOMMENDED)**
3025 *
3026 * ```js
3027 * import { exists, open, close } from 'fs';
3028 *
3029 * exists('myfile', (e) => {
3030 * if (e) {
3031 * console.error('myfile already exists');
3032 * } else {
3033 * open('myfile', 'wx', (err, fd) => {
3034 * if (err) throw err;
3035 *
3036 * try {
3037 * writeMyData(fd);
3038 * } finally {
3039 * close(fd, (err) => {
3040 * if (err) throw err;
3041 * });
3042 * }
3043 * });
3044 * }
3045 * });
3046 * ```
3047 *
3048 * **write (RECOMMENDED)**
3049 *
3050 * ```js
3051 * import { open, close } from 'fs';
3052 * open('myfile', 'wx', (err, fd) => {
3053 * if (err) {
3054 * if (err.code === 'EEXIST') {
3055 * console.error('myfile already exists');
3056 * return;
3057 * }
3058 *
3059 * throw err;
3060 * }
3061 *
3062 * try {
3063 * writeMyData(fd);
3064 * } finally {
3065 * close(fd, (err) => {
3066 * if (err) throw err;
3067 * });
3068 * }
3069 * });
3070 * ```
3071 *
3072 * **read (NOT RECOMMENDED)**
3073 *
3074 * ```js
3075 * import { open, close, exists } from 'fs';
3076 *
3077 * exists('myfile', (e) => {
3078 * if (e) {
3079 * open('myfile', 'r', (err, fd) => {
3080 * if (err) throw err;
3081 *
3082 * try {
3083 * readMyData(fd);
3084 * } finally {
3085 * close(fd, (err) => {
3086 * if (err) throw err;
3087 * });
3088 * }
3089 * });
3090 * } else {
3091 * console.error('myfile does not exist');
3092 * }
3093 * });
3094 * ```
3095 *
3096 * **read (RECOMMENDED)**
3097 *
3098 * ```js
3099 * import { open, close } from 'fs';
3100 *
3101 * open('myfile', 'r', (err, fd) => {
3102 * if (err) {
3103 * if (err.code === 'ENOENT') {
3104 * console.error('myfile does not exist');
3105 * return;
3106 * }
3107 *
3108 * throw err;
3109 * }
3110 *
3111 * try {
3112 * readMyData(fd);
3113 * } finally {
3114 * close(fd, (err) => {
3115 * if (err) throw err;
3116 * });
3117 * }
3118 * });
3119 * ```
3120 *
3121 * The "not recommended" examples above check for existence and then use the
3122 * file; the "recommended" examples are better because they use the file directly
3123 * and handle the error, if any.
3124 *
3125 * In general, check for the existence of a file only if the file won’t be
3126 * used directly, for example when its existence is a signal from another
3127 * process.
3128 * @since v0.0.2
3129 * @deprecated Since v1.0.0 - Use {@link stat} or {@link access} instead.
3130 */
3131 export function exists(path: PathLike, callback: (exists: boolean) => void): void;
3132 /** @deprecated */
3133 export namespace exists {
3134 /**
3135 * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
3136 * URL support is _experimental_.
3137 */
3138 function __promisify__(path: PathLike): Promise<boolean>;
3139 }
3140 /**
3141 * Returns `true` if the path exists, `false` otherwise.
3142 *
3143 * For detailed information, see the documentation of the asynchronous version of
3144 * this API: {@link exists}.
3145 *
3146 * `fs.exists()` is deprecated, but `fs.existsSync()` is not. The `callback`parameter to `fs.exists()` accepts parameters that are inconsistent with other
3147 * Node.js callbacks. `fs.existsSync()` does not use a callback.
3148 *
3149 * ```js
3150 * import { existsSync } from 'fs';
3151 *
3152 * if (existsSync('/etc/passwd'))
3153 * console.log('The path exists.');
3154 * ```
3155 * @since v0.1.21
3156 */
3157 export function existsSync(path: PathLike): boolean;
3158 export namespace constants {
3159 // File Access Constants
3160 /** Constant for fs.access(). File is visible to the calling process. */
3161 const F_OK: number;
3162 /** Constant for fs.access(). File can be read by the calling process. */
3163 const R_OK: number;
3164 /** Constant for fs.access(). File can be written by the calling process. */
3165 const W_OK: number;
3166 /** Constant for fs.access(). File can be executed by the calling process. */
3167 const X_OK: number;
3168 // File Copy Constants
3169 /** Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists. */
3170 const COPYFILE_EXCL: number;
3171 /**
3172 * Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink.
3173 * If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used.
3174 */
3175 const COPYFILE_FICLONE: number;
3176 /**
3177 * Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink.
3178 * If the underlying platform does not support copy-on-write, then the operation will fail with an error.
3179 */
3180 const COPYFILE_FICLONE_FORCE: number;
3181 // File Open Constants
3182 /** Constant for fs.open(). Flag indicating to open a file for read-only access. */
3183 const O_RDONLY: number;
3184 /** Constant for fs.open(). Flag indicating to open a file for write-only access. */
3185 const O_WRONLY: number;
3186 /** Constant for fs.open(). Flag indicating to open a file for read-write access. */
3187 const O_RDWR: number;
3188 /** Constant for fs.open(). Flag indicating to create the file if it does not already exist. */
3189 const O_CREAT: number;
3190 /** Constant for fs.open(). Flag indicating that opening a file should fail if the O_CREAT flag is set and the file already exists. */
3191 const O_EXCL: number;
3192 /**
3193 * Constant for fs.open(). Flag indicating that if path identifies a terminal device,
3194 * opening the path shall not cause that terminal to become the controlling terminal for the process
3195 * (if the process does not already have one).
3196 */
3197 const O_NOCTTY: number;
3198 /** Constant for fs.open(). Flag indicating that if the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero. */
3199 const O_TRUNC: number;
3200 /** Constant for fs.open(). Flag indicating that data will be appended to the end of the file. */
3201 const O_APPEND: number;
3202 /** Constant for fs.open(). Flag indicating that the open should fail if the path is not a directory. */
3203 const O_DIRECTORY: number;
3204 /**
3205 * constant for fs.open().
3206 * Flag indicating reading accesses to the file system will no longer result in
3207 * an update to the atime information associated with the file.
3208 * This flag is available on Linux operating systems only.
3209 */
3210 const O_NOATIME: number;
3211 /** Constant for fs.open(). Flag indicating that the open should fail if the path is a symbolic link. */
3212 const O_NOFOLLOW: number;
3213 /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O. */
3214 const O_SYNC: number;
3215 /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O with write operations waiting for data integrity. */
3216 const O_DSYNC: number;
3217 /** Constant for fs.open(). Flag indicating to open the symbolic link itself rather than the resource it is pointing to. */
3218 const O_SYMLINK: number;
3219 /** Constant for fs.open(). When set, an attempt will be made to minimize caching effects of file I/O. */
3220 const O_DIRECT: number;
3221 /** Constant for fs.open(). Flag indicating to open the file in nonblocking mode when possible. */
3222 const O_NONBLOCK: number;
3223 // File Type Constants
3224 /** Constant for fs.Stats mode property for determining a file's type. Bit mask used to extract the file type code. */
3225 const S_IFMT: number;
3226 /** Constant for fs.Stats mode property for determining a file's type. File type constant for a regular file. */
3227 const S_IFREG: number;
3228 /** Constant for fs.Stats mode property for determining a file's type. File type constant for a directory. */
3229 const S_IFDIR: number;
3230 /** Constant for fs.Stats mode property for determining a file's type. File type constant for a character-oriented device file. */
3231 const S_IFCHR: number;
3232 /** Constant for fs.Stats mode property for determining a file's type. File type constant for a block-oriented device file. */
3233 const S_IFBLK: number;
3234 /** Constant for fs.Stats mode property for determining a file's type. File type constant for a FIFO/pipe. */
3235 const S_IFIFO: number;
3236 /** Constant for fs.Stats mode property for determining a file's type. File type constant for a symbolic link. */
3237 const S_IFLNK: number;
3238 /** Constant for fs.Stats mode property for determining a file's type. File type constant for a socket. */
3239 const S_IFSOCK: number;
3240 // File Mode Constants
3241 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by owner. */
3242 const S_IRWXU: number;
3243 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by owner. */
3244 const S_IRUSR: number;
3245 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by owner. */
3246 const S_IWUSR: number;
3247 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by owner. */
3248 const S_IXUSR: number;
3249 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by group. */
3250 const S_IRWXG: number;
3251 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by group. */
3252 const S_IRGRP: number;
3253 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by group. */
3254 const S_IWGRP: number;
3255 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by group. */
3256 const S_IXGRP: number;
3257 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by others. */
3258 const S_IRWXO: number;
3259 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by others. */
3260 const S_IROTH: number;
3261 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by others. */
3262 const S_IWOTH: number;
3263 /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by others. */
3264 const S_IXOTH: number;
3265 /**
3266 * When set, a memory file mapping is used to access the file. This flag
3267 * is available on Windows operating systems only. On other operating systems,
3268 * this flag is ignored.
3269 */
3270 const UV_FS_O_FILEMAP: number;
3271 }
3272 /**
3273 * Tests a user's permissions for the file or directory specified by `path`.
3274 * The `mode` argument is an optional integer that specifies the accessibility
3275 * checks to be performed. Check `File access constants` for possible values
3276 * of `mode`. It is possible to create a mask consisting of the bitwise OR of
3277 * two or more values (e.g. `fs.constants.W_OK | fs.constants.R_OK`).
3278 *
3279 * The final argument, `callback`, is a callback function that is invoked with
3280 * a possible error argument. If any of the accessibility checks fail, the error
3281 * argument will be an `Error` object. The following examples check if`package.json` exists, and if it is readable or writable.
3282 *
3283 * ```js
3284 * import { access, constants } from 'fs';
3285 *
3286 * const file = 'package.json';
3287 *
3288 * // Check if the file exists in the current directory.
3289 * access(file, constants.F_OK, (err) => {
3290 * console.log(`${file} ${err ? 'does not exist' : 'exists'}`);
3291 * });
3292 *
3293 * // Check if the file is readable.
3294 * access(file, constants.R_OK, (err) => {
3295 * console.log(`${file} ${err ? 'is not readable' : 'is readable'}`);
3296 * });
3297 *
3298 * // Check if the file is writable.
3299 * access(file, constants.W_OK, (err) => {
3300 * console.log(`${file} ${err ? 'is not writable' : 'is writable'}`);
3301 * });
3302 *
3303 * // Check if the file exists in the current directory, and if it is writable.
3304 * access(file, constants.F_OK | constants.W_OK, (err) => {
3305 * if (err) {
3306 * console.error(
3307 * `${file} ${err.code === 'ENOENT' ? 'does not exist' : 'is read-only'}`);
3308 * } else {
3309 * console.log(`${file} exists, and it is writable`);
3310 * }
3311 * });
3312 * ```
3313 *
3314 * Do not use `fs.access()` to check for the accessibility of a file before calling`fs.open()`, `fs.readFile()` or `fs.writeFile()`. Doing
3315 * so introduces a race condition, since other processes may change the file's
3316 * state between the two calls. Instead, user code should open/read/write the
3317 * file directly and handle the error raised if the file is not accessible.
3318 *
3319 * **write (NOT RECOMMENDED)**
3320 *
3321 * ```js
3322 * import { access, open, close } from 'fs';
3323 *
3324 * access('myfile', (err) => {
3325 * if (!err) {
3326 * console.error('myfile already exists');
3327 * return;
3328 * }
3329 *
3330 * open('myfile', 'wx', (err, fd) => {
3331 * if (err) throw err;
3332 *
3333 * try {
3334 * writeMyData(fd);
3335 * } finally {
3336 * close(fd, (err) => {
3337 * if (err) throw err;
3338 * });
3339 * }
3340 * });
3341 * });
3342 * ```
3343 *
3344 * **write (RECOMMENDED)**
3345 *
3346 * ```js
3347 * import { open, close } from 'fs';
3348 *
3349 * open('myfile', 'wx', (err, fd) => {
3350 * if (err) {
3351 * if (err.code === 'EEXIST') {
3352 * console.error('myfile already exists');
3353 * return;
3354 * }
3355 *
3356 * throw err;
3357 * }
3358 *
3359 * try {
3360 * writeMyData(fd);
3361 * } finally {
3362 * close(fd, (err) => {
3363 * if (err) throw err;
3364 * });
3365 * }
3366 * });
3367 * ```
3368 *
3369 * **read (NOT RECOMMENDED)**
3370 *
3371 * ```js
3372 * import { access, open, close } from 'fs';
3373 * access('myfile', (err) => {
3374 * if (err) {
3375 * if (err.code === 'ENOENT') {
3376 * console.error('myfile does not exist');
3377 * return;
3378 * }
3379 *
3380 * throw err;
3381 * }
3382 *
3383 * open('myfile', 'r', (err, fd) => {
3384 * if (err) throw err;
3385 *
3386 * try {
3387 * readMyData(fd);
3388 * } finally {
3389 * close(fd, (err) => {
3390 * if (err) throw err;
3391 * });
3392 * }
3393 * });
3394 * });
3395 * ```
3396 *
3397 * **read (RECOMMENDED)**
3398 *
3399 * ```js
3400 * import { open, close } from 'fs';
3401 *
3402 * open('myfile', 'r', (err, fd) => {
3403 * if (err) {
3404 * if (err.code === 'ENOENT') {
3405 * console.error('myfile does not exist');
3406 * return;
3407 * }
3408 *
3409 * throw err;
3410 * }
3411 *
3412 * try {
3413 * readMyData(fd);
3414 * } finally {
3415 * close(fd, (err) => {
3416 * if (err) throw err;
3417 * });
3418 * }
3419 * });
3420 * ```
3421 *
3422 * The "not recommended" examples above check for accessibility and then use the
3423 * file; the "recommended" examples are better because they use the file directly
3424 * and handle the error, if any.
3425 *
3426 * In general, check for the accessibility of a file only if the file will not be
3427 * used directly, for example when its accessibility is a signal from another
3428 * process.
3429 *
3430 * On Windows, access-control policies (ACLs) on a directory may limit access to
3431 * a file or directory. The `fs.access()` function, however, does not check the
3432 * ACL and therefore may report that a path is accessible even if the ACL restricts
3433 * the user from reading or writing to it.
3434 * @since v0.11.15
3435 * @param [mode=fs.constants.F_OK]
3436 */
3437 export function access(path: PathLike, mode: number | undefined, callback: NoParamCallback): void;
3438 /**
3439 * Asynchronously tests a user's permissions for the file specified by path.
3440 * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
3441 */
3442 export function access(path: PathLike, callback: NoParamCallback): void;
3443 export namespace access {
3444 /**
3445 * Asynchronously tests a user's permissions for the file specified by path.
3446 * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol.
3447 * URL support is _experimental_.
3448 */
3449 function __promisify__(path: PathLike, mode?: number): Promise<void>;
3450 }
3451 /**
3452 * Synchronously tests a user's permissions for the file or directory specified
3453 * by `path`. The `mode` argument is an optional integer that specifies the
3454 * accessibility checks to be performed. Check `File access constants` for
3455 * possible values of `mode`. It is possible to create a mask consisting of
3456 * the bitwise OR of two or more values
3457 * (e.g. `fs.constants.W_OK | fs.constants.R_OK`).
3458 *
3459 * If any of the accessibility checks fail, an `Error` will be thrown. Otherwise,
3460 * the method will return `undefined`.
3461 *
3462 * ```js
3463 * import { accessSync, constants } from 'fs';
3464 *
3465 * try {
3466 * accessSync('etc/passwd', constants.R_OK | constants.W_OK);
3467 * console.log('can read/write');
3468 * } catch (err) {
3469 * console.error('no access!');
3470 * }
3471 * ```
3472 * @since v0.11.15
3473 * @param [mode=fs.constants.F_OK]
3474 */
3475 export function accessSync(path: PathLike, mode?: number): void;
3476 interface StreamOptions {
3477 flags?: string | undefined;
3478 encoding?: BufferEncoding | undefined;
3479 fd?: number | promises.FileHandle | undefined;
3480 mode?: number | undefined;
3481 autoClose?: boolean | undefined;
3482 /**
3483 * @default false
3484 */
3485 emitClose?: boolean | undefined;
3486 start?: number | undefined;
3487 highWaterMark?: number | undefined;
3488 }
3489 interface ReadStreamOptions extends StreamOptions {
3490 end?: number | undefined;
3491 }
3492 /**
3493 * Unlike the 16 kb default `highWaterMark` for a `stream.Readable`, the stream
3494 * returned by this method has a default `highWaterMark` of 64 kb.
3495 *
3496 * `options` can include `start` and `end` values to read a range of bytes from
3497 * the file instead of the entire file. Both `start` and `end` are inclusive and
3498 * start counting at 0, allowed values are in the
3499 * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `fd` is specified and `start` is
3500 * omitted or `undefined`, `fs.createReadStream()` reads sequentially from the
3501 * current file position. The `encoding` can be any one of those accepted by `Buffer`.
3502 *
3503 * If `fd` is specified, `ReadStream` will ignore the `path` argument and will use
3504 * the specified file descriptor. This means that no `'open'` event will be
3505 * emitted. `fd` should be blocking; non-blocking `fd`s should be passed to `net.Socket`.
3506 *
3507 * If `fd` points to a character device that only supports blocking reads
3508 * (such as keyboard or sound card), read operations do not finish until data is
3509 * available. This can prevent the process from exiting and the stream from
3510 * closing naturally.
3511 *
3512 * By default, the stream will emit a `'close'` event after it has been
3513 * destroyed. Set the `emitClose` option to `false` to change this behavior.
3514 *
3515 * By providing the `fs` option, it is possible to override the corresponding `fs`implementations for `open`, `read`, and `close`. When providing the `fs` option,
3516 * an override for `read` is required. If no `fd` is provided, an override for`open` is also required. If `autoClose` is `true`, an override for `close` is
3517 * also required.
3518 *
3519 * ```js
3520 * import { createReadStream } from 'fs';
3521 *
3522 * // Create a stream from some character device.
3523 * const stream = createReadStream('/dev/input/event0');
3524 * setTimeout(() => {
3525 * stream.close(); // This may not close the stream.
3526 * // Artificially marking end-of-stream, as if the underlying resource had
3527 * // indicated end-of-file by itself, allows the stream to close.
3528 * // This does not cancel pending read operations, and if there is such an
3529 * // operation, the process may still not be able to exit successfully
3530 * // until it finishes.
3531 * stream.push(null);
3532 * stream.read(0);
3533 * }, 100);
3534 * ```
3535 *
3536 * If `autoClose` is false, then the file descriptor won't be closed, even if
3537 * there's an error. It is the application's responsibility to close it and make
3538 * sure there's no file descriptor leak. If `autoClose` is set to true (default
3539 * behavior), on `'error'` or `'end'` the file descriptor will be closed
3540 * automatically.
3541 *
3542 * `mode` sets the file mode (permission and sticky bits), but only if the
3543 * file was created.
3544 *
3545 * An example to read the last 10 bytes of a file which is 100 bytes long:
3546 *
3547 * ```js
3548 * import { createReadStream } from 'fs';
3549 *
3550 * createReadStream('sample.txt', { start: 90, end: 99 });
3551 * ```
3552 *
3553 * If `options` is a string, then it specifies the encoding.
3554 * @since v0.1.31
3555 */
3556 export function createReadStream(path: PathLike, options?: BufferEncoding | ReadStreamOptions): ReadStream;
3557 /**
3558 * `options` may also include a `start` option to allow writing data at some
3559 * position past the beginning of the file, allowed values are in the
3560 * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than replacing
3561 * it may require the `flags` option to be set to `r+` rather than the default `w`.
3562 * The `encoding` can be any one of those accepted by `Buffer`.
3563 *
3564 * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'`the file descriptor will be closed automatically. If `autoClose` is false,
3565 * then the file descriptor won't be closed, even if there's an error.
3566 * It is the application's responsibility to close it and make sure there's no
3567 * file descriptor leak.
3568 *
3569 * By default, the stream will emit a `'close'` event after it has been
3570 * destroyed. Set the `emitClose` option to `false` to change this behavior.
3571 *
3572 * By providing the `fs` option it is possible to override the corresponding `fs`implementations for `open`, `write`, `writev` and `close`. Overriding `write()`without `writev()` can reduce
3573 * performance as some optimizations (`_writev()`)
3574 * will be disabled. When providing the `fs` option, overrides for at least one of`write` and `writev` are required. If no `fd` option is supplied, an override
3575 * for `open` is also required. If `autoClose` is `true`, an override for `close`is also required.
3576 *
3577 * Like `fs.ReadStream`, if `fd` is specified, `fs.WriteStream` will ignore the`path` argument and will use the specified file descriptor. This means that no`'open'` event will be
3578 * emitted. `fd` should be blocking; non-blocking `fd`s
3579 * should be passed to `net.Socket`.
3580 *
3581 * If `options` is a string, then it specifies the encoding.
3582 * @since v0.1.31
3583 */
3584 export function createWriteStream(path: PathLike, options?: BufferEncoding | StreamOptions): WriteStream;
3585 /**
3586 * Forces all currently queued I/O operations associated with the file to the
3587 * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. No arguments other
3588 * than a possible
3589 * exception are given to the completion callback.
3590 * @since v0.1.96
3591 */
3592 export function fdatasync(fd: number, callback: NoParamCallback): void;
3593 export namespace fdatasync {
3594 /**
3595 * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device.
3596 * @param fd A file descriptor.
3597 */
3598 function __promisify__(fd: number): Promise<void>;
3599 }
3600 /**
3601 * Forces all currently queued I/O operations associated with the file to the
3602 * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. Returns `undefined`.
3603 * @since v0.1.96
3604 */
3605 export function fdatasyncSync(fd: number): void;
3606 /**
3607 * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it
3608 * already exists. No arguments other than a possible exception are given to the
3609 * callback function. Node.js makes no guarantees about the atomicity of the copy
3610 * operation. If an error occurs after the destination file has been opened for
3611 * writing, Node.js will attempt to remove the destination.
3612 *
3613 * `mode` is an optional integer that specifies the behavior
3614 * of the copy operation. It is possible to create a mask consisting of the bitwise
3615 * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`).
3616 *
3617 * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already
3618 * exists.
3619 * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a
3620 * copy-on-write reflink. If the platform does not support copy-on-write, then a
3621 * fallback copy mechanism is used.
3622 * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to
3623 * create a copy-on-write reflink. If the platform does not support
3624 * copy-on-write, then the operation will fail.
3625 *
3626 * ```js
3627 * import { copyFile, constants } from 'fs';
3628 *
3629 * function callback(err) {
3630 * if (err) throw err;
3631 * console.log('source.txt was copied to destination.txt');
3632 * }
3633 *
3634 * // destination.txt will be created or overwritten by default.
3635 * copyFile('source.txt', 'destination.txt', callback);
3636 *
3637 * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
3638 * copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL, callback);
3639 * ```
3640 * @since v8.5.0
3641 * @param src source filename to copy
3642 * @param dest destination filename of the copy operation
3643 * @param [mode=0] modifiers for copy operation.
3644 */
3645 export function copyFile(src: PathLike, dest: PathLike, callback: NoParamCallback): void;
3646 export function copyFile(src: PathLike, dest: PathLike, mode: number, callback: NoParamCallback): void;
3647 export namespace copyFile {
3648 function __promisify__(src: PathLike, dst: PathLike, mode?: number): Promise<void>;
3649 }
3650 /**
3651 * Synchronously copies `src` to `dest`. By default, `dest` is overwritten if it
3652 * already exists. Returns `undefined`. Node.js makes no guarantees about the
3653 * atomicity of the copy operation. If an error occurs after the destination file
3654 * has been opened for writing, Node.js will attempt to remove the destination.
3655 *
3656 * `mode` is an optional integer that specifies the behavior
3657 * of the copy operation. It is possible to create a mask consisting of the bitwise
3658 * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`).
3659 *
3660 * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already
3661 * exists.
3662 * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a
3663 * copy-on-write reflink. If the platform does not support copy-on-write, then a
3664 * fallback copy mechanism is used.
3665 * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to
3666 * create a copy-on-write reflink. If the platform does not support
3667 * copy-on-write, then the operation will fail.
3668 *
3669 * ```js
3670 * import { copyFileSync, constants } from 'fs';
3671 *
3672 * // destination.txt will be created or overwritten by default.
3673 * copyFileSync('source.txt', 'destination.txt');
3674 * console.log('source.txt was copied to destination.txt');
3675 *
3676 * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
3677 * copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL);
3678 * ```
3679 * @since v8.5.0
3680 * @param src source filename to copy
3681 * @param dest destination filename of the copy operation
3682 * @param [mode=0] modifiers for copy operation.
3683 */
3684 export function copyFileSync(src: PathLike, dest: PathLike, mode?: number): void;
3685 /**
3686 * Write an array of `ArrayBufferView`s to the file specified by `fd` using`writev()`.
3687 *
3688 * `position` is the offset from the beginning of the file where this data
3689 * should be written. If `typeof position !== 'number'`, the data will be written
3690 * at the current position.
3691 *
3692 * The callback will be given three arguments: `err`, `bytesWritten`, and`buffers`. `bytesWritten` is how many bytes were written from `buffers`.
3693 *
3694 * If this method is `util.promisify()` ed, it returns a promise for an`Object` with `bytesWritten` and `buffers` properties.
3695 *
3696 * It is unsafe to use `fs.writev()` multiple times on the same file without
3697 * waiting for the callback. For this scenario, use {@link createWriteStream}.
3698 *
3699 * On Linux, positional writes don't work when the file is opened in append mode.
3700 * The kernel ignores the position argument and always appends the data to
3701 * the end of the file.
3702 * @since v12.9.0
3703 */
3704 export function writev(fd: number, buffers: ReadonlyArray<NodeJS.ArrayBufferView>, cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void): void;
3705 export function writev(
3706 fd: number,
3707 buffers: ReadonlyArray<NodeJS.ArrayBufferView>,
3708 position: number,
3709 cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void
3710 ): void;
3711 export interface WriteVResult {
3712 bytesWritten: number;
3713 buffers: NodeJS.ArrayBufferView[];
3714 }
3715 export namespace writev {
3716 function __promisify__(fd: number, buffers: ReadonlyArray<NodeJS.ArrayBufferView>, position?: number): Promise<WriteVResult>;
3717 }
3718 /**
3719 * For detailed information, see the documentation of the asynchronous version of
3720 * this API: {@link writev}.
3721 * @since v12.9.0
3722 * @return The number of bytes written.
3723 */
3724 export function writevSync(fd: number, buffers: ReadonlyArray<NodeJS.ArrayBufferView>, position?: number): number;
3725 /**
3726 * Read from a file specified by `fd` and write to an array of `ArrayBufferView`s
3727 * using `readv()`.
3728 *
3729 * `position` is the offset from the beginning of the file from where data
3730 * should be read. If `typeof position !== 'number'`, the data will be read
3731 * from the current position.
3732 *
3733 * The callback will be given three arguments: `err`, `bytesRead`, and`buffers`. `bytesRead` is how many bytes were read from the file.
3734 *
3735 * If this method is invoked as its `util.promisify()` ed version, it returns
3736 * a promise for an `Object` with `bytesRead` and `buffers` properties.
3737 * @since v13.13.0, v12.17.0
3738 */
3739 export function readv(fd: number, buffers: ReadonlyArray<NodeJS.ArrayBufferView>, cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void): void;
3740 export function readv(
3741 fd: number,
3742 buffers: ReadonlyArray<NodeJS.ArrayBufferView>,
3743 position: number,
3744 cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void
3745 ): void;
3746 export interface ReadVResult {
3747 bytesRead: number;
3748 buffers: NodeJS.ArrayBufferView[];
3749 }
3750 export namespace readv {
3751 function __promisify__(fd: number, buffers: ReadonlyArray<NodeJS.ArrayBufferView>, position?: number): Promise<ReadVResult>;
3752 }
3753 /**
3754 * For detailed information, see the documentation of the asynchronous version of
3755 * this API: {@link readv}.
3756 * @since v13.13.0, v12.17.0
3757 * @return The number of bytes read.
3758 */
3759 export function readvSync(fd: number, buffers: ReadonlyArray<NodeJS.ArrayBufferView>, position?: number): number;
3760 export interface OpenDirOptions {
3761 encoding?: BufferEncoding | undefined;
3762 /**
3763 * Number of directory entries that are buffered
3764 * internally when reading from the directory. Higher values lead to better
3765 * performance but higher memory usage.
3766 * @default 32
3767 */
3768 bufferSize?: number | undefined;
3769 }
3770 /**
3771 * Synchronously open a directory. See [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html).
3772 *
3773 * Creates an `fs.Dir`, which contains all further functions for reading from
3774 * and cleaning up the directory.
3775 *
3776 * The `encoding` option sets the encoding for the `path` while opening the
3777 * directory and subsequent read operations.
3778 * @since v12.12.0
3779 */
3780 export function opendirSync(path: PathLike, options?: OpenDirOptions): Dir;
3781 /**
3782 * Asynchronously open a directory. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for
3783 * more details.
3784 *
3785 * Creates an `fs.Dir`, which contains all further functions for reading from
3786 * and cleaning up the directory.
3787 *
3788 * The `encoding` option sets the encoding for the `path` while opening the
3789 * directory and subsequent read operations.
3790 * @since v12.12.0
3791 */
3792 export function opendir(path: PathLike, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void;
3793 export function opendir(path: PathLike, options: OpenDirOptions, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void;
3794 export namespace opendir {
3795 function __promisify__(path: PathLike, options?: OpenDirOptions): Promise<Dir>;
3796 }
3797 export interface BigIntStats extends StatsBase<bigint> {
3798 atimeNs: bigint;
3799 mtimeNs: bigint;
3800 ctimeNs: bigint;
3801 birthtimeNs: bigint;
3802 }
3803 export interface BigIntOptions {
3804 bigint: true;
3805 }
3806 export interface StatOptions {
3807 bigint?: boolean | undefined;
3808 }
3809 export interface StatSyncOptions extends StatOptions {
3810 throwIfNoEntry?: boolean | undefined;
3811 }
3812 export interface CopyOptions {
3813 /**
3814 * Dereference symlinks
3815 * @default false
3816 */
3817 dereference?: boolean;
3818 /**
3819 * When `force` is `false`, and the destination
3820 * exists, throw an error.
3821 * @default false
3822 */
3823 errorOnExist?: boolean;
3824 /**
3825 * Function to filter copied files/directories. Return
3826 * `true` to copy the item, `false` to ignore it.
3827 */
3828 filter?(source: string, destination: string): boolean;
3829 /**
3830 * Overwrite existing file or directory. _The copy
3831 * operation will ignore errors if you set this to false and the destination
3832 * exists. Use the `errorOnExist` option to change this behavior.
3833 * @default true
3834 */
3835 force?: boolean;
3836 /**
3837 * When `true` timestamps from `src` will
3838 * be preserved.
3839 * @default false
3840 */
3841 preserveTimestamps?: boolean;
3842 /**
3843 * Copy directories recursively.
3844 * @default false
3845 */
3846 recursive?: boolean;
3847 }
3848 /**
3849 * Asynchronously copies the entire directory structure from `src` to `dest`,
3850 * including subdirectories and files.
3851 *
3852 * When copying a directory to another directory, globs are not supported and
3853 * behavior is similar to `cp dir1/ dir2/`.
3854 * @since v16.7.0
3855 * @experimental
3856 * @param src source path to copy.
3857 * @param dest destination path to copy to.
3858 */
3859 export function cp(source: string, destination: string, callback: (err: NodeJS.ErrnoException | null) => void): void;
3860 export function cp(source: string, destination: string, opts: CopyOptions, callback: (err: NodeJS.ErrnoException | null) => void): void;
3861 /**
3862 * Synchronously copies the entire directory structure from `src` to `dest`,
3863 * including subdirectories and files.
3864 *
3865 * When copying a directory to another directory, globs are not supported and
3866 * behavior is similar to `cp dir1/ dir2/`.
3867 * @since v16.7.0
3868 * @experimental
3869 * @param src source path to copy.
3870 * @param dest destination path to copy to.
3871 */
3872 export function cpSync(source: string, destination: string, opts?: CopyOptions): void;
3873}
3874declare module 'node:fs' {
3875 export * from 'fs';
3876}