All files / src Dirent.ts

81.81% Statements 18/22
100% Branches 0/0
60% Functions 6/10
81.81% Lines 18/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 58 59 60 61  45x 45x     45x         45x   391x 391x   391x 391x 391x   391x     391x 391x 391x     123x       71x       42x                       10x                       45x  
import { Link } from './node';
import { constants } from './constants';
import { TEncodingExtended, strToEncoding, TDataOut } from './encoding';
import type { IDirent } from './node/types/misc';
 
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 implements IDirent {
  static build(link: Link, encoding: TEncodingExtended | undefined) {
    const dirent = new Dirent();
    const { mode } = link.getNode();
 
    dirent.name = strToEncoding(link.getName(), encoding);
    dirent.mode = mode;
    dirent.path = link.getParentPath();
 
    return dirent;
  }
 
  name: TDataOut = '';
  path = '';
  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;