@@ -152,10 +152,6 @@ function createError(errorCode: string, func = '', path = '', path2 = '', Constr
152
152
return error ;
153
153
}
154
154
155
- function throwError ( errorCode : string , func = '' , path = '' , path2 = '' , Constructor = Error ) {
156
- throw createError ( errorCode , func , path , path2 , Constructor ) ;
157
- }
158
-
159
155
// ---------------------------------------- Flags
160
156
161
157
// List of file `flags` as defined by Node.
@@ -695,12 +691,12 @@ export class Volume {
695
691
getLinkOrThrow ( filename : string , funcName ?: string ) : Link {
696
692
const steps = filenameToSteps ( filename ) ;
697
693
const link = this . getLink ( steps ) ;
698
- if ( ! link ) throwError ( ENOENT , funcName , filename ) ;
694
+ if ( ! link ) throw createError ( ENOENT , funcName , filename ) ;
699
695
return link ;
700
696
}
701
697
702
698
// Just like `getLink`, but also dereference/resolves symbolic links.
703
- getResolvedLink ( filenameOrSteps : string | string [ ] ) : Link {
699
+ getResolvedLink ( filenameOrSteps : string | string [ ] ) : Link | null {
704
700
let steps : string [ ] = typeof filenameOrSteps === 'string' ? filenameToSteps ( filenameOrSteps ) : filenameOrSteps ;
705
701
706
702
let link = this . root ;
@@ -727,7 +723,7 @@ export class Volume {
727
723
// Just like `getLinkOrThrow`, but also dereference/resolves symbolic links.
728
724
getResolvedLinkOrThrow ( filename : string , funcName ?: string ) : Link {
729
725
const link = this . getResolvedLink ( filename ) ;
730
- if ( ! link ) throwError ( ENOENT , funcName , filename ) ;
726
+ if ( ! link ) throw createError ( ENOENT , funcName , filename ) ;
731
727
return link ;
732
728
}
733
729
@@ -745,7 +741,7 @@ export class Volume {
745
741
// Just like `getLinkOrThrow`, but also verifies that the link is a directory.
746
742
private getLinkAsDirOrThrow ( filename : string , funcName ?: string ) : Link {
747
743
const link = this . getLinkOrThrow ( filename , funcName ) ;
748
- if ( ! link . getNode ( ) . isDirectory ( ) ) throwError ( ENOTDIR , funcName , filename ) ;
744
+ if ( ! link . getNode ( ) . isDirectory ( ) ) throw createError ( ENOTDIR , funcName , filename ) ;
749
745
return link ;
750
746
}
751
747
@@ -757,8 +753,8 @@ export class Volume {
757
753
private getLinkParentAsDirOrThrow ( filenameOrSteps : string | string [ ] , funcName ?: string ) : Link {
758
754
const steps = filenameOrSteps instanceof Array ? filenameOrSteps : filenameToSteps ( filenameOrSteps ) ;
759
755
const link = this . getLinkParent ( steps ) ;
760
- if ( ! link ) throwError ( ENOENT , funcName , sep + steps . join ( sep ) ) ;
761
- if ( ! link . getNode ( ) . isDirectory ( ) ) throwError ( ENOTDIR , funcName , sep + steps . join ( sep ) ) ;
756
+ if ( ! link ) throw createError ( ENOENT , funcName , sep + steps . join ( sep ) ) ;
757
+ if ( ! link . getNode ( ) . isDirectory ( ) ) throw createError ( ENOTDIR , funcName , sep + steps . join ( sep ) ) ;
762
758
return link ;
763
759
}
764
760
@@ -769,7 +765,7 @@ export class Volume {
769
765
private getFileByFdOrThrow ( fd : number , funcName ?: string ) : File {
770
766
if ( ! isFd ( fd ) ) throw TypeError ( ERRSTR . FD ) ;
771
767
const file = this . getFileByFd ( fd ) ;
772
- if ( ! file ) throwError ( EBADF , funcName ) ;
768
+ if ( ! file ) throw createError ( EBADF , funcName ) ;
773
769
return file ;
774
770
}
775
771
@@ -793,7 +789,7 @@ export class Volume {
793
789
}
794
790
}
795
791
796
- throwError ( ENOENT , 'getNodeByIdOrCreate' , pathToFilename ( id ) ) ;
792
+ throw createError ( ENOENT , 'getNodeByIdOrCreate' , pathToFilename ( id ) ) ;
797
793
}
798
794
}
799
795
@@ -901,15 +897,15 @@ export class Volume {
901
897
// Resolve symlinks.
902
898
let realLink : Link = link ;
903
899
if ( resolveSymlinks ) realLink = this . resolveSymlinks ( link ) ;
904
- if ( ! realLink ) throwError ( ENOENT , 'open' , link . getPath ( ) ) ;
900
+ if ( ! realLink ) throw createError ( ENOENT , 'open' , link . getPath ( ) ) ;
905
901
906
902
const node = realLink . getNode ( ) ;
907
- if ( node . isDirectory ( ) && flagsNum !== FLAGS . r ) throwError ( EISDIR , 'open' , link . getPath ( ) ) ;
903
+ if ( node . isDirectory ( ) && flagsNum !== FLAGS . r ) throw createError ( EISDIR , 'open' , link . getPath ( ) ) ;
908
904
909
905
// Check node permissions
910
906
if ( ! ( flagsNum & O_WRONLY ) ) {
911
907
if ( ! node . canRead ( ) ) {
912
- throwError ( EACCES , 'open' , link . getPath ( ) ) ;
908
+ throw createError ( EACCES , 'open' , link . getPath ( ) ) ;
913
909
}
914
910
}
915
911
if ( flagsNum & O_RDWR ) {
@@ -932,21 +928,21 @@ export class Volume {
932
928
if ( ! link && flagsNum & O_CREAT ) {
933
929
// const dirLink: Link = this.getLinkParent(steps);
934
930
const dirLink : Link = this . getResolvedLink ( steps . slice ( 0 , steps . length - 1 ) ) ;
935
- // if(!dirLink) throwError (ENOENT, 'open', filename);
936
- if ( ! dirLink ) throwError ( ENOENT , 'open' , sep + steps . join ( sep ) ) ;
931
+ // if(!dirLink) throw createError (ENOENT, 'open', filename);
932
+ if ( ! dirLink ) throw createError ( ENOENT , 'open' , sep + steps . join ( sep ) ) ;
937
933
938
934
if ( flagsNum & O_CREAT && typeof modeNum === 'number' ) {
939
935
link = this . createLink ( dirLink , steps [ steps . length - 1 ] , false , modeNum ) ;
940
936
}
941
937
}
942
938
943
939
if ( link ) return this . openLink ( link , flagsNum , resolveSymlinks ) ;
944
- throwError ( ENOENT , 'open' , filename ) ;
940
+ throw createError ( ENOENT , 'open' , filename ) ;
945
941
}
946
942
947
943
private openBase ( filename : string , flagsNum : number , modeNum : number , resolveSymlinks : boolean = true ) : number {
948
944
const file = this . openFile ( filename , flagsNum , modeNum , resolveSymlinks ) ;
949
- if ( ! file ) throwError ( ENOENT , 'open' , filename ) ;
945
+ if ( ! file ) throw createError ( ENOENT , 'open' , filename ) ;
950
946
return file . fd ;
951
947
}
952
948
@@ -1058,7 +1054,7 @@ export class Volume {
1058
1054
1059
1055
if ( link ) {
1060
1056
const node = link . getNode ( ) ;
1061
- if ( node . isDirectory ( ) ) throwError ( EISDIR , 'open' , link . getPath ( ) ) ;
1057
+ if ( node . isDirectory ( ) ) throw createError ( EISDIR , 'open' , link . getPath ( ) ) ;
1062
1058
}
1063
1059
1064
1060
fd = this . openSync ( id as TFilePath , flagsNum ) ;
@@ -1268,18 +1264,18 @@ export class Volume {
1268
1264
private linkBase ( filename1 : string , filename2 : string ) {
1269
1265
const steps1 = filenameToSteps ( filename1 ) ;
1270
1266
const link1 = this . getLink ( steps1 ) ;
1271
- if ( ! link1 ) throwError ( ENOENT , 'link' , filename1 , filename2 ) ;
1267
+ if ( ! link1 ) throw createError ( ENOENT , 'link' , filename1 , filename2 ) ;
1272
1268
1273
1269
const steps2 = filenameToSteps ( filename2 ) ;
1274
1270
1275
1271
// Check new link directory exists.
1276
1272
const dir2 = this . getLinkParent ( steps2 ) ;
1277
- if ( ! dir2 ) throwError ( ENOENT , 'link' , filename1 , filename2 ) ;
1273
+ if ( ! dir2 ) throw createError ( ENOENT , 'link' , filename1 , filename2 ) ;
1278
1274
1279
1275
const name = steps2 [ steps2 . length - 1 ] ;
1280
1276
1281
1277
// Check if new file already exists.
1282
- if ( dir2 . getChild ( name ) ) throwError ( EEXIST , 'link' , filename1 , filename2 ) ;
1278
+ if ( dir2 . getChild ( name ) ) throw createError ( EEXIST , 'link' , filename1 , filename2 ) ;
1283
1279
1284
1280
const node = link1 . getNode ( ) ;
1285
1281
node . nlink ++ ;
@@ -1291,12 +1287,12 @@ export class Volume {
1291
1287
1292
1288
if ( flags & COPYFILE_EXCL ) {
1293
1289
if ( this . existsSync ( dest ) ) {
1294
- throwError ( EEXIST , 'copyFile' , src , dest ) ;
1290
+ throw createError ( EEXIST , 'copyFile' , src , dest ) ;
1295
1291
}
1296
1292
}
1297
1293
1298
1294
if ( flags & COPYFILE_FICLONE_FORCE ) {
1299
- throwError ( ENOSYS , 'copyFile' , src , dest ) ;
1295
+ throw createError ( ENOSYS , 'copyFile' , src , dest ) ;
1300
1296
}
1301
1297
1302
1298
this . writeFileBase ( dest , buf , FLAGS . w , MODE . DEFAULT ) ;
@@ -1346,7 +1342,7 @@ export class Volume {
1346
1342
private unlinkBase ( filename : string ) {
1347
1343
const steps = filenameToSteps ( filename ) ;
1348
1344
const link = this . getLink ( steps ) ;
1349
- if ( ! link ) throwError ( ENOENT , 'unlink' , filename ) ;
1345
+ if ( ! link ) throw createError ( ENOENT , 'unlink' , filename ) ;
1350
1346
1351
1347
// TODO: Check if it is file, dir, other...
1352
1348
@@ -1378,12 +1374,12 @@ export class Volume {
1378
1374
1379
1375
// Check if directory exists, where we about to create a symlink.
1380
1376
const dirLink = this . getLinkParent ( pathSteps ) ;
1381
- if ( ! dirLink ) throwError ( ENOENT , 'symlink' , targetFilename , pathFilename ) ;
1377
+ if ( ! dirLink ) throw createError ( ENOENT , 'symlink' , targetFilename , pathFilename ) ;
1382
1378
1383
1379
const name = pathSteps [ pathSteps . length - 1 ] ;
1384
1380
1385
1381
// Check if new file already exists.
1386
- if ( dirLink . getChild ( name ) ) throwError ( EEXIST , 'symlink' , targetFilename , pathFilename ) ;
1382
+ if ( dirLink . getChild ( name ) ) throw createError ( EEXIST , 'symlink' , targetFilename , pathFilename ) ;
1387
1383
1388
1384
// Create symlink.
1389
1385
const symlink : Link = dirLink . createChild ( name ) ;
@@ -1411,11 +1407,11 @@ export class Volume {
1411
1407
const steps = filenameToSteps ( filename ) ;
1412
1408
const link : Link = this . getLink ( steps ) ;
1413
1409
// TODO: this check has to be perfomed by `lstat`.
1414
- if ( ! link ) throwError ( ENOENT , 'realpath' , filename ) ;
1410
+ if ( ! link ) throw createError ( ENOENT , 'realpath' , filename ) ;
1415
1411
1416
1412
// Resolve symlinks.
1417
1413
const realLink = this . resolveSymlinks ( link ) ;
1418
- if ( ! realLink ) throwError ( ENOENT , 'realpath' , filename ) ;
1414
+ if ( ! realLink ) throw createError ( ENOENT , 'realpath' , filename ) ;
1419
1415
1420
1416
return strToEncoding ( realLink . getPath ( ) , encoding ) ;
1421
1417
}
@@ -1436,7 +1432,7 @@ export class Volume {
1436
1432
private lstatBase ( filename : string , bigint : true ) : Stats < bigint > ;
1437
1433
private lstatBase ( filename : string , bigint : boolean = false ) : Stats {
1438
1434
const link : Link = this . getLink ( filenameToSteps ( filename ) ) ;
1439
- if ( ! link ) throwError ( ENOENT , 'lstat' , filename ) ;
1435
+ if ( ! link ) throw createError ( ENOENT , 'lstat' , filename ) ;
1440
1436
return Stats . build ( link . getNode ( ) , bigint ) ;
1441
1437
}
1442
1438
@@ -1459,11 +1455,11 @@ export class Volume {
1459
1455
private statBase ( filename : string , bigint : true ) : Stats < bigint > ;
1460
1456
private statBase ( filename : string , bigint : boolean = false ) : Stats {
1461
1457
let link : Link = this . getLink ( filenameToSteps ( filename ) ) ;
1462
- if ( ! link ) throwError ( ENOENT , 'stat' , filename ) ;
1458
+ if ( ! link ) throw createError ( ENOENT , 'stat' , filename ) ;
1463
1459
1464
1460
// Resolve symlinks.
1465
1461
link = this . resolveSymlinks ( link ) ;
1466
- if ( ! link ) throwError ( ENOENT , 'stat' , filename ) ;
1462
+ if ( ! link ) throw createError ( ENOENT , 'stat' , filename ) ;
1467
1463
1468
1464
return Stats . build ( link . getNode ( ) , bigint ) ;
1469
1465
}
@@ -1487,7 +1483,7 @@ export class Volume {
1487
1483
private fstatBase ( fd : number , bigint : true ) : Stats < bigint > ;
1488
1484
private fstatBase ( fd : number , bigint : boolean = false ) : Stats {
1489
1485
const file = this . getFileByFd ( fd ) ;
1490
- if ( ! file ) throwError ( EBADF , 'fstat' ) ;
1486
+ if ( ! file ) throw createError ( EBADF , 'fstat' ) ;
1491
1487
return Stats . build ( file . node , bigint ) ;
1492
1488
}
1493
1489
@@ -1507,15 +1503,15 @@ export class Volume {
1507
1503
1508
1504
private renameBase ( oldPathFilename : string , newPathFilename : string ) {
1509
1505
const link : Link = this . getLink ( filenameToSteps ( oldPathFilename ) ) ;
1510
- if ( ! link ) throwError ( ENOENT , 'rename' , oldPathFilename , newPathFilename ) ;
1506
+ if ( ! link ) throw createError ( ENOENT , 'rename' , oldPathFilename , newPathFilename ) ;
1511
1507
1512
1508
// TODO: Check if it is directory, if non-empty, we cannot move it, right?
1513
1509
1514
1510
const newPathSteps = filenameToSteps ( newPathFilename ) ;
1515
1511
1516
1512
// Check directory exists for the new location.
1517
1513
const newPathDirLink : Link = this . getLinkParent ( newPathSteps ) ;
1518
- if ( ! newPathDirLink ) throwError ( ENOENT , 'rename' , oldPathFilename , newPathFilename ) ;
1514
+ if ( ! newPathDirLink ) throw createError ( ENOENT , 'rename' , oldPathFilename , newPathFilename ) ;
1519
1515
1520
1516
// TODO: Also treat cases with directories and symbolic links.
1521
1517
// TODO: See: http://man7.org/linux/man-pages/man2/rename.2.html
@@ -1622,10 +1618,10 @@ export class Volume {
1622
1618
private readdirBase ( filename : string , options : IReaddirOptions ) : TDataOut [ ] | Dirent [ ] {
1623
1619
const steps = filenameToSteps ( filename ) ;
1624
1620
const link : Link = this . getResolvedLink ( steps ) ;
1625
- if ( ! link ) throwError ( ENOENT , 'readdir' , filename ) ;
1621
+ if ( ! link ) throw createError ( ENOENT , 'readdir' , filename ) ;
1626
1622
1627
1623
const node = link . getNode ( ) ;
1628
- if ( ! node . isDirectory ( ) ) throwError ( ENOTDIR , 'scandir' , filename ) ;
1624
+ if ( ! node . isDirectory ( ) ) throw createError ( ENOTDIR , 'scandir' , filename ) ;
1629
1625
1630
1626
if ( options . withFileTypes ) {
1631
1627
const list : Dirent [ ] = [ ] ;
@@ -1669,7 +1665,7 @@ export class Volume {
1669
1665
const link = this . getLinkOrThrow ( filename , 'readlink' ) ;
1670
1666
const node = link . getNode ( ) ;
1671
1667
1672
- if ( ! node . isSymlink ( ) ) throwError ( EINVAL , 'readlink' , filename ) ;
1668
+ if ( ! node . isSymlink ( ) ) throw createError ( EINVAL , 'readlink' , filename ) ;
1673
1669
1674
1670
const str = sep + node . symlink . join ( sep ) ;
1675
1671
return strToEncoding ( str , encoding ) ;
@@ -1790,14 +1786,14 @@ export class Volume {
1790
1786
1791
1787
// This will throw if user tries to create root dir `fs.mkdirSync('/')`.
1792
1788
if ( ! steps . length ) {
1793
- throwError ( EISDIR , 'mkdir' , filename ) ;
1789
+ throw createError ( EISDIR , 'mkdir' , filename ) ;
1794
1790
}
1795
1791
1796
1792
const dir = this . getLinkParentAsDirOrThrow ( filename , 'mkdir' ) ;
1797
1793
1798
1794
// Check path already exists.
1799
1795
const name = steps [ steps . length - 1 ] ;
1800
- if ( dir . getChild ( name ) ) throwError ( EEXIST , 'mkdir' , filename ) ;
1796
+ if ( dir . getChild ( name ) ) throw createError ( EEXIST , 'mkdir' , filename ) ;
1801
1797
1802
1798
dir . createChild ( name , this . createNode ( true , modeNum ) ) ;
1803
1799
}
@@ -1813,12 +1809,12 @@ export class Volume {
1813
1809
for ( let i = 0 ; i < steps . length ; i ++ ) {
1814
1810
const step = steps [ i ] ;
1815
1811
1816
- if ( ! link . getNode ( ) . isDirectory ( ) ) throwError ( ENOTDIR , 'mkdir' , link . getPath ( ) ) ;
1812
+ if ( ! link . getNode ( ) . isDirectory ( ) ) throw createError ( ENOTDIR , 'mkdir' , link . getPath ( ) ) ;
1817
1813
1818
1814
const child = link . getChild ( step ) ;
1819
1815
if ( child ) {
1820
1816
if ( child . getNode ( ) . isDirectory ( ) ) link = child ;
1821
- else throwError ( ENOTDIR , 'mkdir' , child . getPath ( ) ) ;
1817
+ else throw createError ( ENOTDIR , 'mkdir' , child . getPath ( ) ) ;
1822
1818
} else {
1823
1819
link = link . createChild ( step , this . createNode ( true , modeNum ) ) ;
1824
1820
}
@@ -1895,7 +1891,7 @@ export class Volume {
1895
1891
const link = this . getLinkAsDirOrThrow ( filename , 'rmdir' ) ;
1896
1892
1897
1893
// Check directory is empty.
1898
- if ( link . length ) throwError ( ENOTEMPTY , 'rmdir' , filename ) ;
1894
+ if ( link . length ) throw createError ( ENOTEMPTY , 'rmdir' , filename ) ;
1899
1895
1900
1896
this . deleteLink ( link ) ;
1901
1897
}
0 commit comments