diff --git a/.eslintrc b/.eslintrc
index f8a9c318..44a8d5ac 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -28,6 +28,17 @@
"no-constant-condition": 0,
"no-useless-escape": 0,
"no-console": "error",
+ "no-restricted-globals": [
+ "error",
+ {
+ "name": "global",
+ "message": "Use `globalThis` instead"
+ },
+ {
+ "name": "window",
+ "message": "Use `globalThis` instead"
+ }
+ ],
"require-yield": 0,
"eqeqeq": ["error", "smart"],
"spaced-comment": [
@@ -81,7 +92,8 @@
],
"pathGroupsExcludedImportTypes": [
"type"
- ]
+ ],
+ "newlines-between": "never"
}
],
"@typescript-eslint/no-namespace": 0,
@@ -103,7 +115,7 @@
"@typescript-eslint/consistent-type-imports": ["error"],
"@typescript-eslint/consistent-type-exports": ["error"],
"no-throw-literal": "off",
- "@typescript-eslint/no-throw-literal": ["error"],
+ "@typescript-eslint/no-throw-literal": "off",
"@typescript-eslint/no-floating-promises": ["error", {
"ignoreVoid": true,
"ignoreIIFE": true
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f6bd4c38..d450e979 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -169,7 +169,7 @@ build:windows:
- .\scripts\choco-install.ps1
- refreshenv
- npm install --ignore-scripts
- - $env:Path = "$(npm bin);" + $env:Path
+ - $env:Path = "$(npm root)\.bin;" + $env:Path
- npm test -- --ci --coverage
- npm run bench
artifacts:
@@ -192,14 +192,14 @@ build:macos:
stage: build
needs: []
tags:
- - shared-macos-amd64
- image: macos-11-xcode-12
+ - saas-macos-medium-m1
+ image: macos-12-xcode-14
script:
- eval "$(brew shellenv)"
- ./scripts/brew-install.sh
- hash -r
- npm install --ignore-scripts
- - export PATH="$(npm bin):$PATH"
+ - export PATH="$(npm root)/.bin:$PATH"
- npm test -- --ci --coverage
- npm run bench
artifacts:
diff --git a/benches/results/crypto_100KiB.chart.html b/benches/results/crypto_100KiB.chart.html
index 6d819901..f6a06c6a 100644
--- a/benches/results/crypto_100KiB.chart.html
+++ b/benches/results/crypto_100KiB.chart.html
@@ -28,7 +28,7 @@
-
+
Constructors constructor Parameters __namedParameters: { blockSize: number ; chrootParent?: EncryptedFS ; chroots?: Set < EncryptedFS > ; db: DB ; fdMgr: FileDescriptorManager ; iNodeMgr: INodeManager ; logger: Logger ; rootIno: INodeIndex ; umask: number } block Size: number Optional chroot Parent?: EncryptedFS Optional chroots?: Set < EncryptedFS > db: DB fd Mgr: FileDescriptorManager logger: Logger umask: number Properties Readonly [init Lock][init Lock]: RWLockWriter
Protected _cwd_cwd: CurrentDirectory
Readonly block Sizeblock Size: number
Protected Optional chroot ParentProtected fd Mgrfd Mgr: FileDescriptorManager
gid gid: number = permissions.DEFAULT_ROOT_GID
Protected loggerlogger: Logger
uid uid: number = permissions.DEFAULT_ROOT_UID
Accessors [destroyed] get [destroyed]( ) : boolean Methods Protected _open_open( path: Path , flags: string | number , mode?: number , tran?: DBTransaction ) : Promise < [ FileDescriptor , FdIndex ] > Parameters flags: string | number mode: number = permissions.DEFAULT_FILE_PERM Optional tran: DBTransaction Returns Promise < [ FileDescriptor , FdIndex ] > access access( path: Path , mode?: number ) : Promise < void > access( path: Path , callback: Callback < [ ] , any , Error > ) : Promise < void > access( path: Path , mode: number , callback: Callback < [ ] , any , Error > ) : Promise < void > Parameters Returns Promise < void > Parameters Returns Promise < void > Parameters mode: number callback: Callback < [ ] , any , Error > Returns Promise < void > append File append File( file: Path | FdIndex , data: Data , options?: Options ) : Promise < void > append File( file: Path | FdIndex , data: Data , callback: Callback < [ ] , any , Error > ) : Promise < void > append File( file: Path | FdIndex , data: Data , options: Options , callback: Callback < [ ] , any , Error > ) : Promise < void > Parameters Returns Promise < void > Parameters Returns Promise < void > Parameters Returns Promise < void > chdir chdir( path: string ) : Promise < void > chdir( path: string , callback: Callback < [ ] , any , Error > ) : Promise < void > Parameters Returns Promise < void > Parameters path: string callback: Callback < [ ] , any , Error > Returns Promise < void > Protected check Permissionscheck Permissions( access: number , stat: Stat ) : boolean Legend Constructor Property Method Inherited constructor Inherited method Protected property Protected method Settings Theme OS Light Dark
\ No newline at end of file
+
+
+
Parameters
+
+
+
+
+pathS: string
+
+resolveLastLink: boolean = true
+
+activeSymlinks: Set < INodeIndex > = ...
+
+pathStack: string [] = []
+
+origPathS: string = pathS
+
+Optional tran: DBTransaction
+
+
+open
+
+open( path: Path , flags: string | number , mode?: number ) : Promise < FdIndex >
+
+
+
Parameters
+
+
+
+
+flags: string | number
+
+Optional mode: number
+Returns Promise < FdIndex >
+open( path: Path , flags: string | number , callback: Callback < [ FdIndex ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+flags: string | number
+
+callback: Callback < [ FdIndex ] , any , Error >
+Returns Promise < void >
+open( path: Path , flags: string | number , mode: number , callback: Callback < [ FdIndex ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+flags: string | number
+
+mode: number
+
+callback: Callback < [ FdIndex ] , any , Error >
+Returns Promise < void >
+
+
+read
+
+read( fdIndex: FdIndex , buffer: Data , offset?: number , length?: number , position?: number ) : Promise < number >
+
+
+
Parameters
+
+
+fdIndex: FdIndex
+
+
+
+Optional offset: number
+
+Optional length: number
+
+Optional position: number
+Returns Promise < number >
+read( fdIndex: FdIndex , buffer: Data , callback: Callback < [ number ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+fdIndex: FdIndex
+
+
+
+callback: Callback < [ number ] , any , Error >
+Returns Promise < void >
+read( fdIndex: FdIndex , buffer: Data , offset: number , callback: Callback < [ number ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+fdIndex: FdIndex
+
+
+
+offset: number
+
+callback: Callback < [ number ] , any , Error >
+Returns Promise < void >
+read( fdIndex: FdIndex , buffer: Data , offset: number , length: number , callback: Callback < [ number ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+fdIndex: FdIndex
+
+
+
+offset: number
+
+length: number
+
+callback: Callback < [ number ] , any , Error >
+Returns Promise < void >
+read( fdIndex: FdIndex , buffer: Data , offset: number , length: number , position: number , callback: Callback < [ number ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+fdIndex: FdIndex
+
+
+
+offset: number
+
+length: number
+
+position: number
+
+callback: Callback < [ number ] , any , Error >
+Returns Promise < void >
+
+read File
+
+read File( file: File , options?: Options ) : Promise < string | Buffer >
+
+
+Returns Promise < string | Buffer >
+read File( file: File , callback: Callback < [ string | Buffer ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+callback: Callback < [ string | Buffer ] , any , Error >
+Returns Promise < void >
+read File( file: File , options: Options , callback: Callback < [ string | Buffer ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+
+
+callback: Callback < [ string | Buffer ] , any , Error >
+Returns Promise < void >
+
+readdir
+
+readdir( path: Path , options?: Options ) : Promise < ( string | Buffer ) [] >
+
+
+Returns Promise < ( string | Buffer ) [] >
+readdir( path: Path , callback: Callback < [ ( string | Buffer ) [] ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+callback: Callback < [ ( string | Buffer ) [] ] , any , Error >
+Returns Promise < void >
+readdir( path: Path , options: Options , callback: Callback < [ ( string | Buffer ) [] ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+
+
+callback: Callback < [ ( string | Buffer ) [] ] , any , Error >
+Returns Promise < void >
+
+readlink
+
+readlink( path: Path , options?: Options ) : Promise < string | Buffer >
+
+
+Returns Promise < string | Buffer >
+readlink( path: Path , callback: Callback < [ string | Buffer ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+callback: Callback < [ string | Buffer ] , any , Error >
+Returns Promise < void >
+readlink( path: Path , options: Options , callback: Callback < [ string | Buffer ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+
+
+callback: Callback < [ string | Buffer ] , any , Error >
+Returns Promise < void >
+
+realpath
+
+realpath( path: Path , options?: Options ) : Promise < string | Buffer >
+
+
+Returns Promise < string | Buffer >
+realpath( path: Path , callback: Callback < [ string | Buffer ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+callback: Callback < [ string | Buffer ] , any , Error >
+Returns Promise < void >
+realpath( path: Path , options: Options , callback: Callback < [ string | Buffer ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+
+
+callback: Callback < [ string | Buffer ] , any , Error >
+Returns Promise < void >
+
+rename
+
+rename( oldPath: Path , newPath: Path , callback?: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+oldPath: Path
+
+newPath: Path
+
+Optional callback: Callback < [ ] , any , Error >
+Returns Promise < void >
+
+rmdir
+
+rmdir( path: Path , options?: Options ) : Promise < void >
+
+
+Returns Promise < void >
+rmdir( path: Path , callback: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+callback: Callback < [ ] , any , Error >
+Returns Promise < void >
+rmdir( path: Path , options: Options , callback: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+
+
+callback: Callback < [ ] , any , Error >
+Returns Promise < void >
+
+
+start
+
+start( __namedParameters?: { Â Â Â Â fresh?: boolean ; } ) : Promise < void >
+
+
+
Parameters
+
+
+__namedParameters: { Â Â Â Â fresh?: boolean ; } = {}
+
+
+Optional fresh?: boolean
+Returns Promise < void >
+
+stat
+
+stat( path: Path ) : Promise < Stat >
+
+
+Returns Promise < Stat >
+stat( path: Path , callback: Callback < [ Stat ] , any , Error > ) : Promise < void >
+
+
+Returns Promise < void >
+
+stop
+
+stop( ) : Promise < void >
+
+Returns Promise < void >
+
+symlink
+
+symlink( dstPath: Path , srcPath: Path , type?: string ) : Promise < void >
+
+
+
+
Parameters
+
+
+dstPath: Path
+
+srcPath: Path
+
+Optional type: string
+Returns Promise < void >
+symlink( dstPath: Path , srcPath: Path , callback: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+Returns Promise < void >
+symlink( dstPath: Path , srcPath: Path , type: string , callback: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+dstPath: Path
+
+srcPath: Path
+
+type: string
+
+callback: Callback < [ ] , any , Error >
+Returns Promise < void >
+
+truncate
+
+truncate( file: File , len?: number ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+Optional len: number
+Returns Promise < void >
+truncate( file: File , callback: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+callback: Callback < [ ] , any , Error >
+Returns Promise < void >
+truncate( file: File , len: number , callback: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+len: number
+
+callback: Callback < [ ] , any , Error >
+Returns Promise < void >
+
+unlink
+
+unlink( path: Path , callback?: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+Optional callback: Callback < [ ] , any , Error >
+Returns Promise < void >
+
+unset Worker Manager
+
+unset Worker Manager( ) : void
+
+Returns void
+
+utimes
+
+utimes( path: Path , atime: string | number | Date , mtime: string | number | Date , callback?: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+atime: string | number | Date
+
+mtime: string | number | Date
+
+Optional callback: Callback < [ ] , any , Error >
+Returns Promise < void >
+
+write
+
+write( fdIndex: FdIndex , data: Data , offsetOrPos?: number , lengthOrEncoding?: string | number , position?: number ) : Promise < number >
+
+
+
Parameters
+
+
+fdIndex: FdIndex
+
+
+
+Optional offsetOrPos: number
+
+Optional lengthOrEncoding: string | number
+
+Optional position: number
+Returns Promise < number >
+write( fdIndex: FdIndex , data: Data , callback: Callback < [ number ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+fdIndex: FdIndex
+
+
+
+callback: Callback < [ number ] , any , Error >
+Returns Promise < void >
+write( fdIndex: FdIndex , data: Data , offsetOrPos: number , callback: Callback < [ number ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+fdIndex: FdIndex
+
+
+
+offsetOrPos: number
+
+callback: Callback < [ number ] , any , Error >
+Returns Promise < void >
+write( fdIndex: FdIndex , data: Data , offsetOrPos: number , lengthOrEncoding: string | number , callback: Callback < [ number ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+fdIndex: FdIndex
+
+
+
+offsetOrPos: number
+
+lengthOrEncoding: string | number
+
+callback: Callback < [ number ] , any , Error >
+Returns Promise < void >
+write( fdIndex: FdIndex , data: Data , offsetOrPos: number , lengthOrEncoding: string | number , position: number , callback: Callback < [ number ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+fdIndex: FdIndex
+
+
+
+offsetOrPos: number
+
+lengthOrEncoding: string | number
+
+position: number
+
+callback: Callback < [ number ] , any , Error >
+Returns Promise < void >
+
+write File
+
+write File( file: File , data?: Data , options?: Options ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+Optional data: Data
+
+Optional options: Options
+Returns Promise < void >
+write File( file: File , data: Data , callback: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+
+
+callback: Callback < [ ] , any , Error >
+Returns Promise < void >
+write File( file: File , data: Data , options: Options , callback: Callback < [ ] , any , Error > ) : Promise < void >
+
+
+
Parameters
+
+
+
+
+
+
+
+
+callback: Callback < [ ] , any , Error >
+Returns Promise < void >
+
+Static create EncryptedFS
+
+create EncryptedFS( __namedParameters: { Â Â Â Â blockSize?: number ; Â Â Â Â dbKey: Buffer ; Â Â Â Â dbPath: string ; Â Â Â Â fdMgr?: FileDescriptorManager ; Â Â Â Â fresh?: boolean ; Â Â Â Â iNodeMgr?: INodeManager ; Â Â Â Â logger?: Logger ; Â Â Â Â umask?: number ; } ) : Promise < EncryptedFS >
+
+
+
Parameters
+
+
+__namedParameters: { Â Â Â Â blockSize?: number ; Â Â Â Â dbKey: Buffer ; Â Â Â Â dbPath: string ; Â Â Â Â fdMgr?: FileDescriptorManager ; Â Â Â Â fresh?: boolean ; Â Â Â Â iNodeMgr?: INodeManager ; Â Â Â Â logger?: Logger ; Â Â Â Â umask?: number ; }
+
+
+Optional block Size?: number
+
+db Key: Buffer
+
+db Path: string
+
+Optional fd Mgr?: FileDescriptorManager
+
+Optional fresh?: boolean
+
+
+
+Optional logger?: Logger
+
+Optional umask?: number
+
+create EncryptedFS( __namedParameters: { Â Â Â Â blockSize?: number ; Â Â Â Â db: DB ; Â Â Â Â fdMgr?: FileDescriptorManager ; Â Â Â Â fresh?: boolean ; Â Â Â Â iNodeMgr?: INodeManager ; Â Â Â Â logger?: Logger ; Â Â Â Â umask?: number ; } ) : Promise < EncryptedFS >
+
+
+
Parameters
+
+
+__namedParameters: { Â Â Â Â blockSize?: number ; Â Â Â Â db: DB ; Â Â Â Â fdMgr?: FileDescriptorManager ; Â Â Â Â fresh?: boolean ; Â Â Â Â iNodeMgr?: INodeManager ; Â Â Â Â logger?: Logger ; Â Â Â Â umask?: number ; }
+
+
+Optional block Size?: number
+
+db: DB
+
+Optional fd Mgr?: FileDescriptorManager
+
+Optional fresh?: boolean
+
+
+
+Optional logger?: Logger
+
+Optional umask?: number
+
+
+
+
This call must handle concurrent races to create the file inode
-