Type aliases
AliasFSOptions
AliasFSOptions<P>: object
Type parameters
ChangeFileOptions
ChangeFileOptions: Partial<object>
CopyOptions
CopyOptions: object
Type declaration
-
overwrite: boolean
-
stableSort: boolean
-
stableTime: boolean
CreateReadStreamOptions
CreateReadStreamOptions: Partial<object>
CreateWriteStreamOptions
CreateWriteStreamOptions: Partial<object>
CustomDirOptions
CustomDirOptions: object
Type declaration
-
Optional onClose?: undefined | function
CustomStatWatcherOptions
CustomStatWatcherOptions: object
Type declaration
-
Optional bigint?: undefined | false | true
CwdFSOptions
CwdFSOptions: object
Dir
Dir<P>: object
Type parameters
Type declaration
-
path: P
-
[Symbol.asyncIterator]: function
- [Symbol.asyncIterator](): AsyncIterableIterator<Dirent>
-
Returns AsyncIterableIterator<Dirent>
-
close: function
- close(): Promise<void>
- close(cb: NoParamCallback): void
-
Returns Promise<void>
-
Parameters
Returns void
-
closeSync: function
-
read: function
- read(): Promise<Dirent | null>
- read(cb: function): void
-
Returns Promise<Dirent | null>
-
Parameters
-
cb: function
-
- (err: ErrnoException | null, dirent: Dirent | null): void
-
Parameters
-
err: ErrnoException | null
-
dirent: Dirent | null
Returns void
Returns void
-
readSync: function
Dirent
Dirent: Exclude<NodeDirent, "name"> & object
ExtractHintOptions
ExtractHintOptions: object
Type declaration
-
relevantExtensions: Set<string>
FSPath
FSPath<T>: T | number
Type parameters
Filename
Filename: string & object
JailFSOptions
JailFSOptions: object
LUTimes
LUTimes<P>: Array<[]>
Type parameters
LazyFSFactory
LazyFSFactory<P>: function
Type parameters
MkdirOptions
MkdirOptions: Partial<object>
NativePath
NativePath: string & object
OpendirOptions
OpendirOptions: Partial<object>
Operations
Operations: Array<function>
PortablePath
PortablePath: string & object
RmdirOptions
RmdirOptions: Partial<object>
StatWatcher
StatWatcher: EventEmitter & object
SymlinkType
SymlinkType: "file" | "dir" | "junction"
VirtualFSOptions
VirtualFSOptions: object
WatchCallback
WatchCallback: function
Type declaration
-
- (eventType: string, filename: string): void
-
Parameters
-
eventType: string
-
filename: string
Returns void
WatchFileCallback
WatchFileCallback: function
Type declaration
-
- (current: Stats, previous: Stats): void
-
Parameters
-
current: Stats
-
previous: Stats
Returns void
WatchFileOptions
WatchFileOptions: Partial<object>
WatchOptions
WatchOptions: Partial<object> | string
WriteFileOptions
WriteFileOptions: Partial<object> | string
ZipBufferOptions
ZipBufferOptions: object
Type declaration
-
-
-
Optional readOnly?: undefined | false | true
-
Optional stats?: Stats
ZipCompression
ZipCompression: "mixed" | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
ZipOpenFSOptions
ZipOpenFSOptions: object
Type declaration
-
-
Optional filter?: RegExp | null
-
-
Optional maxAge?: undefined | number
-
Optional maxOpenFiles?: undefined | number
-
Optional readOnlyArchives?: undefined | false | true
-
Optional useCache?: undefined | false | true
Variables
Const ASYNC_IMPLEMENTATIONS
ASYNC_IMPLEMENTATIONS: Set<string> = new Set([`accessPromise`,`appendFilePromise`,`chmodPromise`,`chownPromise`,`closePromise`,`copyFilePromise`,`linkPromise`,`fstatPromise`,`lstatPromise`,`lutimesPromise`,`mkdirPromise`,`openPromise`,`opendirPromise`,`readdirPromise`,`realpathPromise`,`readFilePromise`,`readdirPromise`,`readlinkPromise`,`renamePromise`,`rmdirPromise`,`statPromise`,`symlinkPromise`,`truncatePromise`,`unlinkPromise`,`utimesPromise`,`writeFilePromise`,`writeSync`,])
Const DEFAULT_COMPRESSION_LEVEL
Const FILEHANDLE_IMPLEMENTATIONS
FILEHANDLE_IMPLEMENTATIONS: Set<string> = new Set([`appendFilePromise`,`chmodPromise`,`chownPromise`,`closePromise`,`readPromise`,`readFilePromise`,`statPromise`,`truncatePromise`,`utimesPromise`,`writePromise`,`writeFilePromise`,])
Const FILE_PARTS_REGEX
FILE_PARTS_REGEX: RegExp = /.*?(?<!\/)\.zip(?=\/|$)/
Const JAIL_ROOT
JAIL_ROOT: string & object = PortablePath.root
Const NUMBER_REGEXP
NUMBER_REGEXP: RegExp = /^[0-9]+$/
Const PORTABLE_PATH_REGEXP
PORTABLE_PATH_REGEXP: RegExp = /^\/([a-zA-Z]:.*)$/
Const SYNC_IMPLEMENTATIONS
SYNC_IMPLEMENTATIONS: Set<string> = new Set([`accessSync`,`appendFileSync`,`createReadStream`,`chmodSync`,`chownSync`,`closeSync`,`copyFileSync`,`linkSync`,`lstatSync`,`fstatSync`,`lutimesSync`,`mkdirSync`,`openSync`,`opendirSync`,`readSync`,`readlinkSync`,`readFileSync`,`readdirSync`,`readlinkSync`,`realpathSync`,`renameSync`,`rmdirSync`,`statSync`,`symlinkSync`,`truncateSync`,`unlinkSync`,`unwatchFile`,`utimesSync`,`watch`,`watchFile`,`writeFileSync`,`writeSync`,])
Const S_IFDIR
S_IFDIR: 16384 = 16384
Const S_IFLNK
S_IFLNK: 40960 = 40960
Const S_IFMT
S_IFMT: 61440 = 61440
Const S_IFREG
S_IFREG: 32768 = 32768
Const UNC_PORTABLE_PATH_REGEXP
UNC_PORTABLE_PATH_REGEXP: RegExp = /^\/unc\/(\.dot\/)?(.*)$/
Const UNC_WINDOWS_PATH_REGEXP
UNC_WINDOWS_PATH_REGEXP: RegExp = /^\\\\(\.\\)?(.*)$/
Const VALID_COMPONENT
VALID_COMPONENT: RegExp = /^([^/]+-)?[a-f0-9]+$/
Const VIRTUAL_REGEXP
VIRTUAL_REGEXP: RegExp = /^(\/(?:[^/]+\/)*?\$\$virtual)((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/
Const WINDOWS_PATH_REGEXP
WINDOWS_PATH_REGEXP: RegExp = /^([a-zA-Z]:.*)$/
Const ZIP_DIR1
ZIP_DIR1: string & object = ppath.join(npath.toPortablePath(__dirname),`fixtures/foo.zip` as Filename)
Const ZIP_DIR2
ZIP_DIR2: string & object = ppath.join(npath.toPortablePath(__dirname),`fixtures/folder.zip/foo.zip` as Filename)
Const ZIP_FD
ZIP_FD: 2147483648 = 2147483648
Const ZIP_FILE1
ZIP_FILE1: string & object = ppath.join(ZIP_DIR1, `foo.txt` as Filename)
Const ZIP_FILE2
ZIP_FILE2: string & object = ppath.join(ZIP_DIR2, `foo.txt` as Filename)
Let cleanExitRegistered
cleanExitRegistered: boolean = false
Const defaultTime
defaultTime: Date = new Date(315532800 * 1000)
Const statWatchersByFakeFS
stat
WatchersByFakeFS: WeakMap<FakeFS<string & object | string & object>, Map<string & object | string & object, CustomStatWatcher<string & object | string & object>>> = new WeakMap<FakeFS<Path>, Map<Path, CustomStatWatcher<Path>>>()
Const tmpdirs
tmpdirs: Set<string & object> = new Set<PortablePath>()
Const xfs
xfs
: XFS = Object.assign(new NodeFS(), {detachTemp(p: PortablePath) {tmpdirs.delete(p);},mktempSync<T>(this: XFS, cb?: (p: PortablePath) => T) {registerCleanExit();while (true) {const p = getTempName(`xfs-`);try {this.mkdirSync(p);} catch (error) {if (error.code === `EEXIST`) {continue;} else {throw error;}}const realP = this.realpathSync(p);tmpdirs.add(realP);if (typeof cb !== `undefined`) {try {return cb(realP);} finally {if (tmpdirs.has(realP)) {tmpdirs.delete(realP);try {this.removeSync(realP);} catch {// Too bad if there's an error}}}} else {return p;}}},async mktempPromise<T>(this: XFS, cb?: (p: PortablePath) => Promise<T>) {registerCleanExit();while (true) {const p = getTempName(`xfs-`);try {await this.mkdirPromise(p);} catch (error) {if (error.code === `EEXIST`) {continue;} else {throw error;}}const realP = await this.realpathPromise(p);tmpdirs.add(realP);if (typeof cb !== `undefined`) {try {return await cb(realP);} finally {if (tmpdirs.has(realP)) {tmpdirs.delete(realP);try {await this.removePromise(realP);} catch {// Too bad if there's an error}}}} else {return realP;}}},async rmtempPromise() {await Promise.all(Array.from(tmpdirs.values()).map(async p => {try {await xfs.removePromise(p, {maxRetries: 0});tmpdirs.delete(p);} catch {// Too bad if there's an error}}));},rmtempSync() {for (const p of tmpdirs) {try {xfs.removeSync(p);tmpdirs.delete(p);} catch {// Too bad if there's an error}}},})
@yarnpkg/fslib
A TypeScript library abstracting the Node filesystem APIs. We use it for three main reasons:
Type-safe paths
Our library has two path types,
NativePath
andPortablePath
. Most interfaces only accept the later, and instances of the former need to be transformed back and forth using our type-safe utilities before being usable.Custom filesystems
The FSLib implements various transparent filesystem layers for a variety of purposes. For instance we use it in Yarn in order to abstract away the zip archive manipulation logic, which is implemented in
ZipFS
and exposed through a Node-like interface (calledFakeFS
).All
FakeFS
implementations can be transparently layered on top of the builtin Nodefs
module, and that's for instance how we can add support for in-zip package loading without you having to care about the exact package format.Promisified API
All methods from the
FakeFS
interface are promisified by default (and suffixed for greater clarity, for instance we offer bothreadFileSync
andreadFilePromise
).