/
Dirent.ts
57 lines (43 loc) · 1.25 KB
/
Dirent.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import { Link } from './node';
import { constants } from './constants';
import { TEncodingExtended, strToEncoding, TDataOut } from './encoding';
const { S_IFMT, S_IFDIR, S_IFREG, S_IFBLK, S_IFCHR, S_IFLNK, S_IFIFO, S_IFSOCK } = constants;
/**
* A directory entry, like `fs.Dirent`.
*/
export class Dirent {
static build(link: Link, encoding: TEncodingExtended | undefined) {
const dirent = new Dirent();
const { mode } = link.getNode();
dirent.name = strToEncoding(link.getName(), encoding);
dirent.mode = mode;
return dirent;
}
name: TDataOut = '';
private mode: number = 0;
private _checkModeProperty(property: number): boolean {
return (this.mode & S_IFMT) === property;
}
isDirectory(): boolean {
return this._checkModeProperty(S_IFDIR);
}
isFile(): boolean {
return this._checkModeProperty(S_IFREG);
}
isBlockDevice(): boolean {
return this._checkModeProperty(S_IFBLK);
}
isCharacterDevice(): boolean {
return this._checkModeProperty(S_IFCHR);
}
isSymbolicLink(): boolean {
return this._checkModeProperty(S_IFLNK);
}
isFIFO(): boolean {
return this._checkModeProperty(S_IFIFO);
}
isSocket(): boolean {
return this._checkModeProperty(S_IFSOCK);
}
}
export default Dirent;