UNPKG

16.4 kBTypeScriptView Raw
1/// <reference types="node" />
2import { PathLike, symlink } from 'fs';
3import { Node, Link, File } from './node';
4import Stats from './Stats';
5import Dirent from './Dirent';
6import { TSetTimeout } from './setTimeoutUnref';
7import { Readable, Writable } from 'stream';
8import { constants } from './constants';
9import { EventEmitter } from 'events';
10import { TEncodingExtended, TDataOut } from './encoding';
11export interface IError extends Error {
12 code?: string;
13}
14export declare type TFileId = PathLike | number;
15export declare type TData = TDataOut | Uint8Array;
16export declare type TFlags = string | number;
17export declare type TMode = string | number;
18export declare type TTime = number | string | Date;
19export declare type TCallback<TData> = (error?: IError | null, data?: TData) => void;
20export declare enum FLAGS {
21 r,
22 'r+',
23 rs,
24 sr,
25 'rs+',
26 'sr+',
27 w,
28 wx,
29 xw,
30 'w+',
31 'wx+',
32 'xw+',
33 a,
34 ax,
35 xa,
36 'a+',
37 'ax+',
38 'xa+'
39}
40export declare type TFlagsCopy = typeof constants.COPYFILE_EXCL | typeof constants.COPYFILE_FICLONE | typeof constants.COPYFILE_FICLONE_FORCE;
41export declare function flagsToNumber(flags: TFlags | undefined): number;
42export interface IOptions {
43 encoding?: BufferEncoding | TEncodingExtended;
44}
45export interface IFileOptions extends IOptions {
46 mode?: TMode;
47 flag?: TFlags;
48}
49export interface IReadFileOptions extends IOptions {
50 flag?: string;
51}
52export interface IWriteFileOptions extends IFileOptions {
53}
54export interface IAppendFileOptions extends IFileOptions {
55}
56export interface IRealpathOptions {
57 encoding?: TEncodingExtended;
58}
59export interface IWatchFileOptions {
60 persistent?: boolean;
61 interval?: number;
62}
63export interface IReadStreamOptions {
64 flags?: TFlags;
65 encoding?: BufferEncoding;
66 fd?: number;
67 mode?: TMode;
68 autoClose?: boolean;
69 start?: number;
70 end?: number;
71}
72export interface IWriteStreamOptions {
73 flags?: TFlags;
74 defaultEncoding?: BufferEncoding;
75 fd?: number;
76 mode?: TMode;
77 autoClose?: boolean;
78 start?: number;
79}
80export interface IWatchOptions extends IOptions {
81 persistent?: boolean;
82 recursive?: boolean;
83}
84export interface IMkdirOptions {
85 mode?: TMode;
86 recursive?: boolean;
87}
88export interface IRmdirOptions {
89 recursive?: boolean;
90}
91export interface IReaddirOptions extends IOptions {
92 withFileTypes?: boolean;
93}
94export interface IStatOptions {
95 bigint?: boolean;
96}
97export declare function pathToFilename(path: PathLike): string;
98export declare function filenameToSteps(filename: string, base?: string): string[];
99export declare function pathToSteps(path: PathLike): string[];
100export declare function dataToStr(data: TData, encoding?: string): string;
101export declare function dataToBuffer(data: TData, encoding?: string): Buffer;
102export declare function bufferToEncoding(buffer: Buffer, encoding?: TEncodingExtended): TDataOut;
103export declare function toUnixTimestamp(time: any): any;
104declare type DirectoryContent = string | null;
105export interface DirectoryJSON {
106 [key: string]: DirectoryContent;
107}
108export interface NestedDirectoryJSON {
109 [key: string]: DirectoryContent | NestedDirectoryJSON;
110}
111/**
112 * `Volume` represents a file system.
113 */
114export declare class Volume {
115 static fromJSON(json: DirectoryJSON, cwd?: string): Volume;
116 static fromNestedJSON(json: NestedDirectoryJSON, cwd?: string): Volume;
117 /**
118 * Global file descriptor counter. UNIX file descriptors start from 0 and go sequentially
119 * up, so here, in order not to conflict with them, we choose some big number and descrease
120 * the file descriptor of every new opened file.
121 * @type {number}
122 * @todo This should not be static, right?
123 */
124 static fd: number;
125 root: Link;
126 ino: number;
127 inodes: {
128 [ino: number]: Node;
129 };
130 releasedInos: number[];
131 fds: {
132 [fd: number]: File;
133 };
134 releasedFds: number[];
135 maxFiles: number;
136 openFiles: number;
137 StatWatcher: new () => StatWatcher;
138 ReadStream: new (...args: any[]) => IReadStream;
139 WriteStream: new (...args: any[]) => IWriteStream;
140 FSWatcher: new () => FSWatcher;
141 props: {
142 Node: new (...args: any[]) => Node;
143 Link: new (...args: any[]) => Link;
144 File: new (...args: any[]) => File;
145 };
146 private promisesApi;
147 get promises(): import("./promises").IPromisesAPI;
148 constructor(props?: {});
149 createLink(): Link;
150 createLink(parent: Link, name: string, isDirectory?: boolean, perm?: number): Link;
151 deleteLink(link: Link): boolean;
152 private newInoNumber;
153 private newFdNumber;
154 createNode(isDirectory?: boolean, perm?: number): Node;
155 private getNode;
156 private deleteNode;
157 genRndStr(): any;
158 getLink(steps: string[]): Link | null;
159 getLinkOrThrow(filename: string, funcName?: string): Link;
160 getResolvedLink(filenameOrSteps: string | string[]): Link | null;
161 getResolvedLinkOrThrow(filename: string, funcName?: string): Link;
162 resolveSymlinks(link: Link): Link | null;
163 private getLinkAsDirOrThrow;
164 private getLinkParent;
165 private getLinkParentAsDirOrThrow;
166 private getFileByFd;
167 private getFileByFdOrThrow;
168 private getNodeByIdOrCreate;
169 private wrapAsync;
170 private _toJSON;
171 toJSON(paths?: PathLike | PathLike[], json?: {}, isRelative?: boolean): DirectoryJSON;
172 fromJSON(json: DirectoryJSON, cwd?: string): void;
173 fromNestedJSON(json: NestedDirectoryJSON, cwd?: string): void;
174 reset(): void;
175 mountSync(mountpoint: string, json: DirectoryJSON): void;
176 private openLink;
177 private openFile;
178 private openBase;
179 openSync(path: PathLike, flags: TFlags, mode?: TMode): number;
180 open(path: PathLike, flags: TFlags, /* ... */ callback: TCallback<number>): any;
181 open(path: PathLike, flags: TFlags, mode: TMode, callback: TCallback<number>): any;
182 private closeFile;
183 closeSync(fd: number): void;
184 close(fd: number, callback: TCallback<void>): void;
185 private openFileOrGetById;
186 private readBase;
187 readSync(fd: number, buffer: Buffer | Uint8Array, offset: number, length: number, position: number): number;
188 read(fd: number, buffer: Buffer | Uint8Array, offset: number, length: number, position: number, callback: (err?: Error | null, bytesRead?: number, buffer?: Buffer | Uint8Array) => void): void;
189 private readFileBase;
190 readFileSync(file: TFileId, options?: IReadFileOptions | string): TDataOut;
191 readFile(id: TFileId, callback: TCallback<TDataOut>): any;
192 readFile(id: TFileId, options: IReadFileOptions | string, callback: TCallback<TDataOut>): any;
193 private writeBase;
194 writeSync(fd: number, buffer: Buffer | Uint8Array, offset?: number, length?: number, position?: number): number;
195 writeSync(fd: number, str: string, position?: number, encoding?: BufferEncoding): number;
196 write(fd: number, buffer: Buffer | Uint8Array, callback: (...args: any[]) => void): any;
197 write(fd: number, buffer: Buffer | Uint8Array, offset: number, callback: (...args: any[]) => void): any;
198 write(fd: number, buffer: Buffer | Uint8Array, offset: number, length: number, callback: (...args: any[]) => void): any;
199 write(fd: number, buffer: Buffer | Uint8Array, offset: number, length: number, position: number, callback: (...args: any[]) => void): any;
200 write(fd: number, str: string, callback: (...args: any[]) => void): any;
201 write(fd: number, str: string, position: number, callback: (...args: any[]) => void): any;
202 write(fd: number, str: string, position: number, encoding: BufferEncoding, callback: (...args: any[]) => void): any;
203 private writeFileBase;
204 writeFileSync(id: TFileId, data: TData, options?: IWriteFileOptions): void;
205 writeFile(id: TFileId, data: TData, callback: TCallback<void>): any;
206 writeFile(id: TFileId, data: TData, options: IWriteFileOptions | string, callback: TCallback<void>): any;
207 private linkBase;
208 private copyFileBase;
209 copyFileSync(src: PathLike, dest: PathLike, flags?: TFlagsCopy): void;
210 copyFile(src: PathLike, dest: PathLike, callback: TCallback<void>): any;
211 copyFile(src: PathLike, dest: PathLike, flags: TFlagsCopy, callback: TCallback<void>): any;
212 linkSync(existingPath: PathLike, newPath: PathLike): void;
213 link(existingPath: PathLike, newPath: PathLike, callback: TCallback<void>): void;
214 private unlinkBase;
215 unlinkSync(path: PathLike): void;
216 unlink(path: PathLike, callback: TCallback<void>): void;
217 private symlinkBase;
218 symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type): void;
219 symlink(target: PathLike, path: PathLike, callback: TCallback<void>): any;
220 symlink(target: PathLike, path: PathLike, type: symlink.Type, callback: TCallback<void>): any;
221 private realpathBase;
222 realpathSync(path: PathLike, options?: IRealpathOptions | string): TDataOut;
223 realpath(path: PathLike, callback: TCallback<TDataOut>): any;
224 realpath(path: PathLike, options: IRealpathOptions | string, callback: TCallback<TDataOut>): any;
225 private lstatBase;
226 lstatSync(path: PathLike): Stats<number>;
227 lstatSync(path: PathLike, options: {
228 bigint: false;
229 }): Stats<number>;
230 lstatSync(path: PathLike, options: {
231 bigint: true;
232 }): Stats<bigint>;
233 lstat(path: PathLike, callback: TCallback<Stats>): any;
234 lstat(path: PathLike, options: IStatOptions, callback: TCallback<Stats>): any;
235 private statBase;
236 statSync(path: PathLike): Stats<number>;
237 statSync(path: PathLike, options: {
238 bigint: false;
239 }): Stats<number>;
240 statSync(path: PathLike, options: {
241 bigint: true;
242 }): Stats<bigint>;
243 stat(path: PathLike, callback: TCallback<Stats>): any;
244 stat(path: PathLike, options: IStatOptions, callback: TCallback<Stats>): any;
245 private fstatBase;
246 fstatSync(fd: number): Stats<number>;
247 fstatSync(fd: number, options: {
248 bigint: false;
249 }): Stats<number>;
250 fstatSync(fd: number, options: {
251 bigint: true;
252 }): Stats<bigint>;
253 fstat(fd: number, callback: TCallback<Stats>): any;
254 fstat(fd: number, options: IStatOptions, callback: TCallback<Stats>): any;
255 private renameBase;
256 renameSync(oldPath: PathLike, newPath: PathLike): void;
257 rename(oldPath: PathLike, newPath: PathLike, callback: TCallback<void>): void;
258 private existsBase;
259 existsSync(path: PathLike): boolean;
260 exists(path: PathLike, callback: (exists: boolean) => void): void;
261 private accessBase;
262 accessSync(path: PathLike, mode?: number): void;
263 access(path: PathLike, callback: TCallback<void>): any;
264 access(path: PathLike, mode: number, callback: TCallback<void>): any;
265 appendFileSync(id: TFileId, data: TData, options?: IAppendFileOptions | string): void;
266 appendFile(id: TFileId, data: TData, callback: TCallback<void>): any;
267 appendFile(id: TFileId, data: TData, options: IAppendFileOptions | string, callback: TCallback<void>): any;
268 private readdirBase;
269 readdirSync(path: PathLike, options?: IReaddirOptions | string): TDataOut[] | Dirent[];
270 readdir(path: PathLike, callback: TCallback<TDataOut[] | Dirent[]>): any;
271 readdir(path: PathLike, options: IReaddirOptions | string, callback: TCallback<TDataOut[] | Dirent[]>): any;
272 private readlinkBase;
273 readlinkSync(path: PathLike, options?: IOptions): TDataOut;
274 readlink(path: PathLike, callback: TCallback<TDataOut>): any;
275 readlink(path: PathLike, options: IOptions, callback: TCallback<TDataOut>): any;
276 private fsyncBase;
277 fsyncSync(fd: number): void;
278 fsync(fd: number, callback: TCallback<void>): void;
279 private fdatasyncBase;
280 fdatasyncSync(fd: number): void;
281 fdatasync(fd: number, callback: TCallback<void>): void;
282 private ftruncateBase;
283 ftruncateSync(fd: number, len?: number): void;
284 ftruncate(fd: number, callback: TCallback<void>): any;
285 ftruncate(fd: number, len: number, callback: TCallback<void>): any;
286 private truncateBase;
287 truncateSync(id: TFileId, len?: number): void;
288 truncate(id: TFileId, callback: TCallback<void>): any;
289 truncate(id: TFileId, len: number, callback: TCallback<void>): any;
290 private futimesBase;
291 futimesSync(fd: number, atime: TTime, mtime: TTime): void;
292 futimes(fd: number, atime: TTime, mtime: TTime, callback: TCallback<void>): void;
293 private utimesBase;
294 utimesSync(path: PathLike, atime: TTime, mtime: TTime): void;
295 utimes(path: PathLike, atime: TTime, mtime: TTime, callback: TCallback<void>): void;
296 private mkdirBase;
297 /**
298 * Creates directory tree recursively.
299 * @param filename
300 * @param modeNum
301 */
302 private mkdirpBase;
303 mkdirSync(path: PathLike, options?: TMode | IMkdirOptions): void;
304 mkdir(path: PathLike, callback: TCallback<void>): any;
305 mkdir(path: PathLike, mode: TMode | IMkdirOptions, callback: TCallback<void>): any;
306 mkdirpSync(path: PathLike, mode?: TMode): void;
307 mkdirp(path: PathLike, callback: TCallback<void>): any;
308 mkdirp(path: PathLike, mode: TMode, callback: TCallback<void>): any;
309 private mkdtempBase;
310 mkdtempSync(prefix: string, options?: IOptions): TDataOut;
311 mkdtemp(prefix: string, callback: TCallback<void>): any;
312 mkdtemp(prefix: string, options: IOptions, callback: TCallback<void>): any;
313 private rmdirBase;
314 rmdirSync(path: PathLike, options?: IRmdirOptions): void;
315 rmdir(path: PathLike, callback: TCallback<void>): any;
316 rmdir(path: PathLike, options: IRmdirOptions, callback: TCallback<void>): any;
317 private fchmodBase;
318 fchmodSync(fd: number, mode: TMode): void;
319 fchmod(fd: number, mode: TMode, callback: TCallback<void>): void;
320 private chmodBase;
321 chmodSync(path: PathLike, mode: TMode): void;
322 chmod(path: PathLike, mode: TMode, callback: TCallback<void>): void;
323 private lchmodBase;
324 lchmodSync(path: PathLike, mode: TMode): void;
325 lchmod(path: PathLike, mode: TMode, callback: TCallback<void>): void;
326 private fchownBase;
327 fchownSync(fd: number, uid: number, gid: number): void;
328 fchown(fd: number, uid: number, gid: number, callback: TCallback<void>): void;
329 private chownBase;
330 chownSync(path: PathLike, uid: number, gid: number): void;
331 chown(path: PathLike, uid: number, gid: number, callback: TCallback<void>): void;
332 private lchownBase;
333 lchownSync(path: PathLike, uid: number, gid: number): void;
334 lchown(path: PathLike, uid: number, gid: number, callback: TCallback<void>): void;
335 private statWatchers;
336 watchFile(path: PathLike, listener: (curr: Stats, prev: Stats) => void): StatWatcher;
337 watchFile(path: PathLike, options: IWatchFileOptions, listener: (curr: Stats, prev: Stats) => void): StatWatcher;
338 unwatchFile(path: PathLike, listener?: (curr: Stats, prev: Stats) => void): void;
339 createReadStream(path: PathLike, options?: IReadStreamOptions | string): IReadStream;
340 createWriteStream(path: PathLike, options?: IWriteStreamOptions | string): IWriteStream;
341 watch(path: PathLike, options?: IWatchOptions | string, listener?: (eventType: string, filename: string) => void): FSWatcher;
342}
343export declare class StatWatcher extends EventEmitter {
344 vol: Volume;
345 filename: string;
346 interval: number;
347 timeoutRef?: any;
348 setTimeout: TSetTimeout;
349 prev: Stats;
350 constructor(vol: Volume);
351 private loop;
352 private hasChanged;
353 private onInterval;
354 start(path: string, persistent?: boolean, interval?: number): void;
355 stop(): void;
356}
357export interface IReadStream extends Readable {
358 new (path: PathLike, options: IReadStreamOptions): any;
359 open(): any;
360 close(callback: TCallback<void>): any;
361 bytesRead: number;
362 path: string;
363}
364export interface IWriteStream extends Writable {
365 bytesWritten: number;
366 path: string;
367 new (path: PathLike, options: IWriteStreamOptions): any;
368 open(): any;
369 close(): any;
370}
371export declare class FSWatcher extends EventEmitter {
372 _vol: Volume;
373 _filename: string;
374 _steps: string[];
375 _filenameEncoded: TDataOut;
376 _recursive: boolean;
377 _encoding: BufferEncoding;
378 _link: Link;
379 _timer: any;
380 constructor(vol: Volume);
381 private _getName;
382 private _onNodeChange;
383 private _onParentChild;
384 private _emit;
385 private _persist;
386 start(path: PathLike, persistent?: boolean, recursive?: boolean, encoding?: BufferEncoding): void;
387 close(): void;
388}
389export {};